<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div style="margin:0;">Hi,</div><div style="margin:0;"><br></div><div style="margin:0;">I am writing a new backend and I met some problem.</div><div style="margin:0;">I want to support in IR: sdiv v32i16 %a, %b. But the target only support sdiv v16i32 %a, %b natively.</div><div style="margin:0;">Could I promote v32i16 to v32i32, split v32i32 to two v16i32 , truncate v16i32 to v16i16 and merge two v16i16 into one v32i16?</div><div style="margin:0;">Is this way possible?</div><div style="margin:0;">I saw the code fragment in TargetLowering.h:</div><div style="margin:0;">============================================================</div><div style="margin:0;"> 169  /// This enum indicates whether a types are legal for a target, and if not,<br> 170  /// what action should be used to make them valid.<br> 171  enum LegalizeTypeAction : uint8_t {<br> 172    TypeLegal,           // The target natively supports this type.<br> 173    TypePromoteInteger,  // Replace this integer with a larger one.<br> 174    TypeExpandInteger,   // Split this integer into two of half the size.<br> 175    TypeSoftenFloat,     // Convert this float to a same size integer type.<br> 176    TypeExpandFloat,     // Split this float into two of half the size.<br> 177    TypeScalarizeVector, // Replace this one-element vector with its element.<br> 178    TypeSplitVector,     // Split this vector into two of half the size.<br> 179    TypeWidenVector,     // This vector should be widened into a larger vector.<br> 180    TypePromoteFloat,    // Replace this float with a larger one.<br> 181    TypeSoftPromoteHalf, // Soften half to i16 and use float to do arithmetic.<br> 182  };</div><div style="margin:0;">=============================================================</div><div style="margin:0;">I don't quite understand the action <span style="display: inline !important; float: none; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">TypeWidenVector. What does it do?  Does this action do like promote v32i16 to v32i32?</span></div><div style="margin:0;">If this way is possible, where should I set the <span style="display: inline !important; float: none; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">LegalizeTypeAction in the source code?</span></div><div style="margin:0;">Is it in the constructor of class XXXTargetLowering? And How could I set the action to manipulate the process as I want?</div><div style="margin:0;">Thanks!</div><div style="margin:0;"><br></div><div style="margin:0;">Best regards,</div><div style="margin:0;">Jerry</div><div style="margin:0;"><br></div></div><br><br><span title="neteasefooter"><p> </p></span>