Issue 137209
Summary [DirectX] Legalize the `llvm.is.fpclass` intrinsic
Labels backend:DirectX
Assignees
Reporter farzonl
    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
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to