diff options
Diffstat (limited to 'llvm/test/CodeGen/PowerPC')
-rw-r--r-- | llvm/test/CodeGen/PowerPC/fast-isel-fcmp-nan.ll | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-fcmp-nan.ll b/llvm/test/CodeGen/PowerPC/fast-isel-fcmp-nan.ll new file mode 100644 index 00000000000..4390b938aea --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/fast-isel-fcmp-nan.ll @@ -0,0 +1,187 @@ +; RUN: llc -mtriple powerpc64le-unknown-linux-gnu -fast-isel -O0 < %s | FileCheck %s + +define i1 @TestULT(double %t0) { +; CHECK-LABEL: TestULT: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp ult double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestULE(double %t0) { +; CHECK-LABEL: TestULE: +; CHECK: fcmpu +; CHECK-NEXT: ble +; CHECK: blr +entry: + %t1 = fcmp ule double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestUNE(double %t0) { +; CHECK-LABEL: TestUNE: +; CHECK: fcmpu +; CHECK-NEXT: bne +; CHECK: blr +entry: + %t1 = fcmp une double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestUEQ(double %t0) { +; CHECK-LABEL: TestUEQ: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp ueq double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestUGT(double %t0) { +; CHECK-LABEL: TestUGT: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp ugt double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestUGE(double %t0) { +; CHECK-LABEL: TestUGE: +; CHECK: fcmpu +; CHECK-NEXT: bge +; CHECK: blr +entry: + %t1 = fcmp uge double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestOLT(double %t0) { +; CHECK-LABEL: TestOLT: +; CHECK: fcmpu +; CHECK-NEXT: blt +; CHECK: blr +entry: + %t1 = fcmp olt double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestOLE(double %t0) { +; CHECK-LABEL: TestOLE: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp ole double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestONE(double %t0) { +; CHECK-LABEL: TestONE: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp one double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestOEQ(double %t0) { +; CHECK-LABEL: TestOEQ: +; CHECK: fcmpu +; CHECK-NEXT: beq +; CHECK: blr +entry: + %t1 = fcmp oeq double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestOGT(double %t0) { +; CHECK-LABEL: TestOGT: +; CHECK: fcmpu +; CHECK-NEXT: bgt +; CHECK: blr +entry: + %t1 = fcmp ogt double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} + +define i1 @TestOGE(double %t0) { +; CHECK-LABEL: TestOGE: +; CHECK: mcrf +; CHECK: blr +entry: + %t1 = fcmp oge double %t0, 0.000000e+00 + br i1 %t1, label %good, label %bad + +bad: + ret i1 false + +good: + ret i1 true +} |