<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/137209>137209</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] Legalize the `llvm.is.fpclass` intrinsic
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:DirectX
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          farzonl
      </td>
    </tr>
</table>

<pre>
    The half to float casts are introducing `@llvm.is.fpclass.f32` into the backend:

## Example
```llvm
 %31 = tail call i1 @llvm.is.fpclass.f32(float %29, i32 32)
 %32 = tail call i1 @llvm.is.fpclass.f32(float %30, i32 32)
```

## Example with more context

```llvm
%23 = call %dx.types.Handle @llvm.dx.resource.casthandle.s_dx.types.Handles.tdx.RawBuffer_f16_1_0t(target("dx.RawBuffer", half, 1, 0) zeroinitializer)
  %24 = call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16(i32 139, %dx.types.Handle %23, i32 %21, i32 0, i8 1, i32 2)
  %25 = extractvalue %dx.types.ResRet.f16 %24, 0
  %26 = call %dx.types.Handle @llvm.dx.resource.casthandle.s_dx.types.Handles.tdx.RawBuffer_f16_1_0t(target("dx.RawBuffer", half, 1, 0) zeroinitializer)
  %27 = call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16(i32 139, %dx.types.Handle %26, i32 %22, i32 0, i8 1, i32 2)
  %28 = extractvalue %dx.types.ResRet.f16 %27, 0
  %29 = fpext reassoc nnan ninf nsz arcp afn half %25 to float
  %30 = fpext reassoc nnan ninf nsz arcp afn half %28 to float
  %31 = tail call i1 @llvm.is.fpclass.f32(float %29, i32 32)
  %32 = tail call i1 @llvm.is.fpclass.f32(float %30, i32 32)
  br i1 %31, label %33, label %37

33:                                               ; preds = %14
  %34 = fcmp reassoc nnan ninf nsz arcp afn olt half %28, 0xH0000
  %35 = or i1 %34, %32
  %36 = select reassoc nnan ninf nsz arcp afn i1 %35, float 0xC00921FB80000000, float %29
  br label %90

37: ; preds = %14
  %38 = fcmp reassoc nnan ninf nsz arcp afn oeq half %25, 0xH0000
  %39 = fcmp reassoc nnan ninf nsz arcp afn oeq half %28, 0xH0000
  %40 = select i1 %38, i1 %39, i1 false
  br i1 %40, label %41, label %43
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1z2zYQ_TXgBRMOuCAo8sCDHVWTQ06eHnrzQOBSQgsRLAA5jH99ByAlS67SJB73EA1H_MDu8u172OVK7_VuQGyJuCdinclj2FvX9tI928FkW9t9bX_fI91L09NgaW-sDFRJHzyVDqkegrPdUelhR0nFSMmMeTrk2uf9qIz0Pu85kIpFQ0vDHulWqr9w6Ai_IywdwAlw-tskD6PB-KBi8xEjEXZHCQheUMLXNEhtqJLGUF3Qb7wL6hkjAQENgY9Uc6DxeXOKBW-JxdnrWGect_KgX3TY04N1SJUdAk5hsXqVXETJE54EhYDopjx8HdHnn-TQGTxD66bcobdHpzCP_O_Tcu4fXzn4PHRT_iC_3B_7Ht1jX1SPxSMLBOog3Q7jBQG4tCEAMbmocTwX8Y8RaOgzOqsHHbQ0-jnaJQ4TteVt0A_oHzDkfVFF4N2U2zF3p_d8trKLSwTqSGTBkz63co6snPiON8XpZlahpucHcAlKJFA4BSdVeJLmiN8EF1OY8zw5V7-iDKv_W4bqUgb4MRnqn5JhdS1Dk5z7EadAHUrvraLDIAc66KGng3-m0qmRyn6Ym9Ks-6k1ncJw9oYw9b_DvFffec_GQ-nWJd-ILy4aucWkP-fXt6u56XBO-B39uR_h93R02PmEmYAoynMec-336jB-j1prwgW9SejpE2PsLDefS9aeEyqXvcjhbDIXpkeD6rtaLlFEjDJTyKaPjDVQbO5rNv9e1matFkbPtDVLR-erSNt_EVH_OBH498V2vUVE87ZYt0gt2SVjCyXJcLluluteGo_XO6pkV1uovN5gJb_8hmVdy7uGNzLDtliVQhTFqq6yfcu7bcWbDlUBvVRCcVyBUihwu4Wed5DpFhgIVkJZVMBZlTOBqu9WlRS1EqWUpGR4kNrkqTqs22Xa-yO2BV8Ba7IEyKehBeBlolhrhyr8ERupWGeujc4ftsedj2WmffAv4YIOJk09Jx-xpp9xlzpsmlOWb_RFZS5jjNOD1yo7OtPuQxh9nGRgQ2Cz02F_3ObKHghs0vd9Pn0Ynf0TVSCwSUl4Apslj6cW_gkAAP__3unAJQ">