Use SExt instead of ZExt for frexp. (#2395)

* Use SExt instead of ZExt for frexp.
This commit is contained in:
Xiang Li 2019-08-06 13:58:35 -07:00 коммит произвёл GitHub
Родитель f5b8c0967e
Коммит 7c7bb98f0f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 19 добавлений и 1 удалений

Просмотреть файл

@ -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;
}