<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
I am working on a target that has some wide registers for certain special instructions. Similar in some degree to the 80-bit floating point registers.
</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
I want these to be allocatable and so they are exposed as a set of named registers and a custom RegisterClass. That class is currently annotated with a wide machine type, such as “v8i64”.</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
There is no operational support anywhere else for these wide types except moving them to a set of general purpose registers which is a multi-instruction sequence.<span style="mso-spacerun:yes"> 
</span></p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
I want to expose such a value via builtins and intrinsics. There is no expressivity problem here, it is easy to have intrinsics which take/return a v8i64 and the IR allows loads and stores of those values. Loads and stores of such value is lowered by SelectionDAG/LegalizeTypes
 to sequences of smaller loads and stores, which what I would want. </p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
My problem is that with no change, I get an assertion failure in SplitVectoResult since it does not know how to split the intrinsic. And if course split the intrinsic is not what is desired.<span style="mso-spacerun:yes"> 
</span>Using TargetLoweringBase::setOperationAction for intrinsics to Legal for the type did not change since the result type is not legal.</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
I tried, announcing the register class with TargetLoweringBase::addRegisterClass for the specified v8i64 type, then LegalizeTypes stops lowering the load and store operations.<span style="mso-spacerun:yes"> 
</span></p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
Perhaps this approach is wrong and I need to add a new MVT and plumb that through the intrinsics although that seems quite invasive. </p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
Is there a good example for me to mimic?</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
Thanks</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
david</p>
<p style="margin: 0in 0in 8pt; line-height: 107%; font-family: "Calibri",sans-serif; font-size: 11pt">
<o:p> </o:p></p>
<br>
</span></div>
</body>
</html>