Use SExt instead of ZExt for frexp. (#2395)
* Use SExt instead of ZExt for frexp.
This commit is contained in:
Родитель
f5b8c0967e
Коммит
7c7bb98f0f
|
@ -1981,7 +1981,7 @@ Value *TranslateFrexp(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
|
|||
|
||||
// bool ne = val != 0;
|
||||
Value *notZero = Builder.CreateFCmpUNE(val, zeroVal);
|
||||
notZero = Builder.CreateZExt(notZero, dstTy);
|
||||
notZero = Builder.CreateSExt(notZero, dstTy);
|
||||
|
||||
Value *intVal = Builder.CreateBitCast(val, dstTy);
|
||||
// temp = intVal & exponentMask;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: %dxc -E main -T ps_6_2 %s | FileCheck %s
|
||||
|
||||
// Make sure frexp generate code pattern.
|
||||
// CHECK:bitcast float {{.*}} to i32
|
||||
// CHECK:and i32 {{.*}}, 2139095040
|
||||
// CHECK:add {{.*}}, -1056964608
|
||||
// CHECK:ashr {{.*}}, 23
|
||||
// CHECK:sitofp
|
||||
// CHECK:and i32 {{.*}}, 8388607
|
||||
// CHECK:or i32 {{.*}}, 1056964608
|
||||
// CHECK:fadd
|
||||
|
||||
float main(float a:A) : SV_Target {
|
||||
float b;
|
||||
float c = frexp ( a , b );
|
||||
|
||||
return b+c;
|
||||
}
|
Загрузка…
Ссылка в новой задаче