| Index: crosstest/test_fcmp.pnacl.ll
|
| diff --git a/crosstest/test_fcmp.pnacl.ll b/crosstest/test_fcmp.pnacl.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7c4d42e5a15f99bd80ca642b428907088704c4cc
|
| --- /dev/null
|
| +++ b/crosstest/test_fcmp.pnacl.ll
|
| @@ -0,0 +1,324 @@
|
| +target triple = "i686-pc-linux-gnu"
|
| +
|
| +; This file is extracted from fp.pnacl.ll in the lit tests, with
|
| +; the "internal" attribute removed from the functions.
|
| +
|
| +define i32 @fcmpFalseFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp false float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpFalseFloat:
|
| +; CHECK: mov {{.*}}, 0
|
| +
|
| +define i32 @fcmpFalseDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp false double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpFalseDouble:
|
| +; CHECK: mov {{.*}}, 0
|
| +
|
| +define i32 @fcmpOeqFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp oeq float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOeqFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jne .
|
| +; CHECK: jp .
|
| +
|
| +define i32 @fcmpOeqDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp oeq double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOeqDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jne .
|
| +; CHECK: jp .
|
| +
|
| +define i32 @fcmpOgtFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ogt float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOgtFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: ja .
|
| +
|
| +define i32 @fcmpOgtDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ogt double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOgtDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: ja .
|
| +
|
| +define i32 @fcmpOgeFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp oge float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOgeFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jae .
|
| +
|
| +define i32 @fcmpOgeDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp oge double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOgeDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jae .
|
| +
|
| +define i32 @fcmpOltFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp olt float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOltFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: ja .
|
| +
|
| +define i32 @fcmpOltDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp olt double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOltDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: ja .
|
| +
|
| +define i32 @fcmpOleFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ole float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOleFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jae .
|
| +
|
| +define i32 @fcmpOleDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ole double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOleDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jae .
|
| +
|
| +define i32 @fcmpOneFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp one float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOneFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jne .
|
| +
|
| +define i32 @fcmpOneDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp one double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOneDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jne .
|
| +
|
| +define i32 @fcmpOrdFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ord float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOrdFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jnp .
|
| +
|
| +define i32 @fcmpOrdDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ord double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpOrdDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jnp .
|
| +
|
| +define i32 @fcmpUeqFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ueq float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUeqFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: je .
|
| +
|
| +define i32 @fcmpUeqDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ueq double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUeqDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: je .
|
| +
|
| +define i32 @fcmpUgtFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ugt float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUgtFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jb .
|
| +
|
| +define i32 @fcmpUgtDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ugt double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUgtDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jb .
|
| +
|
| +define i32 @fcmpUgeFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp uge float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUgeFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jbe .
|
| +
|
| +define i32 @fcmpUgeDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp uge double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUgeDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jbe .
|
| +
|
| +define i32 @fcmpUltFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ult float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUltFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jb .
|
| +
|
| +define i32 @fcmpUltDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ult double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUltDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jb .
|
| +
|
| +define i32 @fcmpUleFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp ule float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUleFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jbe .
|
| +
|
| +define i32 @fcmpUleDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp ule double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUleDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jbe .
|
| +
|
| +define i32 @fcmpUneFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp une float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUneFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: je .
|
| +; CHECK: jnp .
|
| +
|
| +define i32 @fcmpUneDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp une double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUneDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: je .
|
| +; CHECK: jnp .
|
| +
|
| +define i32 @fcmpUnoFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp uno float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUnoFloat:
|
| +; CHECK: ucomiss
|
| +; CHECK: jp .
|
| +
|
| +define i32 @fcmpUnoDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp uno double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpUnoDouble:
|
| +; CHECK: ucomisd
|
| +; CHECK: jp .
|
| +
|
| +define i32 @fcmpTrueFloat(float %a, float %b) {
|
| +entry:
|
| + %cmp = fcmp true float %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpTrueFloat:
|
| +; CHECK: mov {{.*}}, 1
|
| +
|
| +define i32 @fcmpTrueDouble(double %a, double %b) {
|
| +entry:
|
| + %cmp = fcmp true double %a, %b
|
| + %cmp.ret_ext = zext i1 %cmp to i32
|
| + ret i32 %cmp.ret_ext
|
| +}
|
| +; CHECK: fcmpTrueDouble:
|
| +; CHECK: mov {{.*}}, 1
|
|
|