Mercurial > hg > CbC > CbC_llvm
diff test/CodeGen/X86/compare-inf.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 803732b1fca8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/CodeGen/X86/compare-inf.ll Thu Dec 12 13:56:28 2013 +0900 @@ -0,0 +1,126 @@ +; RUN: llc < %s -march=x86-64 | FileCheck %s + +; Convert oeq and une to ole/oge/ule/uge when comparing with infinity +; and negative infinity, because those are more efficient on x86. + +declare void @f() nounwind + +; CHECK-LABEL: oeq_inff: +; CHECK: ucomiss +; CHECK: jb +define void @oeq_inff(float %x) nounwind { + %t0 = fcmp oeq float %x, 0x7FF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: oeq_inf: +; CHECK: ucomisd +; CHECK: jb +define void @oeq_inf(double %x) nounwind { + %t0 = fcmp oeq double %x, 0x7FF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: une_inff: +; CHECK: ucomiss +; CHECK: jae +define void @une_inff(float %x) nounwind { + %t0 = fcmp une float %x, 0x7FF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: une_inf: +; CHECK: ucomisd +; CHECK: jae +define void @une_inf(double %x) nounwind { + %t0 = fcmp une double %x, 0x7FF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: oeq_neg_inff: +; CHECK: ucomiss +; CHECK: jb +define void @oeq_neg_inff(float %x) nounwind { + %t0 = fcmp oeq float %x, 0xFFF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: oeq_neg_inf: +; CHECK: ucomisd +; CHECK: jb +define void @oeq_neg_inf(double %x) nounwind { + %t0 = fcmp oeq double %x, 0xFFF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: une_neg_inff: +; CHECK: ucomiss +; CHECK: jae +define void @une_neg_inff(float %x) nounwind { + %t0 = fcmp une float %x, 0xFFF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +} + +; CHECK-LABEL: une_neg_inf: +; CHECK: ucomisd +; CHECK: jae +define void @une_neg_inf(double %x) nounwind { + %t0 = fcmp une double %x, 0xFFF0000000000000 + br i1 %t0, label %true, label %false + +true: + call void @f() nounwind + br label %false + +false: + ret void +}