Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Unified Diff: crosstest/test_fcmp.pnacl.ll

Issue 1497033002: Fuse icmp/fcmp with select (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | crosstest/test_fcmp_main.cpp » ('j') | src/IceInstX86BaseImpl.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: crosstest/test_fcmp.pnacl.ll
diff --git a/crosstest/test_fcmp.pnacl.ll b/crosstest/test_fcmp.pnacl.ll
index 06378924b12c070ca961f5ddb2650da135670063..4e097cc1b55b4afde6be518de0ac6c206a611ae3 100644
--- a/crosstest/test_fcmp.pnacl.ll
+++ b/crosstest/test_fcmp.pnacl.ll
@@ -321,6 +321,326 @@ entry:
; CHECK: fcmpTrueDouble:
; CHECK: mov {{.*}}, 1
+define i32 @fcmpSelectFalseFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp false float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectFalseFloat:
+; CHECK: mov {{.*}}, 0
+
+define i32 @fcmpSelectFalseDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp false double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectFalseDouble:
+; CHECK: mov {{.*}}, 0
+
+define i32 @fcmpSelectOeqFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp oeq float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOeqFloat:
+; CHECK: ucomiss
+; CHECK: jne .
+; CHECK: jp .
+
+define i32 @fcmpSelectOeqDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp oeq double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOeqDouble:
+; CHECK: ucomisd
+; CHECK: jne .
+; CHECK: jp .
+
+define i32 @fcmpSelectOgtFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ogt float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOgtFloat:
+; CHECK: ucomiss
+; CHECK: ja .
+
+define i32 @fcmpSelectOgtDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ogt double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOgtDouble:
+; CHECK: ucomisd
+; CHECK: ja .
+
+define i32 @fcmpSelectOgeFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp oge float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOgeFloat:
+; CHECK: ucomiss
+; CHECK: jae .
+
+define i32 @fcmpSelectOgeDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp oge double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOgeDouble:
+; CHECK: ucomisd
+; CHECK: jae .
+
+define i32 @fcmpSelectOltFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp olt float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOltFloat:
+; CHECK: ucomiss
+; CHECK: ja .
+
+define i32 @fcmpSelectOltDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp olt double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOltDouble:
+; CHECK: ucomisd
+; CHECK: ja .
+
+define i32 @fcmpSelectOleFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ole float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOleFloat:
+; CHECK: ucomiss
+; CHECK: jae .
+
+define i32 @fcmpSelectOleDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ole double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOleDouble:
+; CHECK: ucomisd
+; CHECK: jae .
+
+define i32 @fcmpSelectOneFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp one float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOneFloat:
+; CHECK: ucomiss
+; CHECK: jne .
+
+define i32 @fcmpSelectOneDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp one double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOneDouble:
+; CHECK: ucomisd
+; CHECK: jne .
+
+define i32 @fcmpSelectOrdFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ord float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOrdFloat:
+; CHECK: ucomiss
+; CHECK: jnp .
+
+define i32 @fcmpSelectOrdDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ord double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectOrdDouble:
+; CHECK: ucomisd
+; CHECK: jnp .
+
+define i32 @fcmpSelectUeqFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ueq float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUeqFloat:
+; CHECK: ucomiss
+; CHECK: je .
+
+define i32 @fcmpSelectUeqDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ueq double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUeqDouble:
+; CHECK: ucomisd
+; CHECK: je .
+
+define i32 @fcmpSelectUgtFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ugt float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUgtFloat:
+; CHECK: ucomiss
+; CHECK: jb .
+
+define i32 @fcmpSelectUgtDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ugt double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUgtDouble:
+; CHECK: ucomisd
+; CHECK: jb .
+
+define i32 @fcmpSelectUgeFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp uge float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUgeFloat:
+; CHECK: ucomiss
+; CHECK: jbe .
+
+define i32 @fcmpSelectUgeDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp uge double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUgeDouble:
+; CHECK: ucomisd
+; CHECK: jbe .
+
+define i32 @fcmpSelectUltFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ult float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUltFloat:
+; CHECK: ucomiss
+; CHECK: jb .
+
+define i32 @fcmpSelectUltDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ult double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUltDouble:
+; CHECK: ucomisd
+; CHECK: jb .
+
+define i32 @fcmpSelectUleFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ule float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUleFloat:
+; CHECK: ucomiss
+; CHECK: jbe .
+
+define i32 @fcmpSelectUleDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp ule double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUleDouble:
+; CHECK: ucomisd
+; CHECK: jbe .
+
+define i32 @fcmpSelectUneFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp une float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUneFloat:
+; CHECK: ucomiss
+; CHECK: je .
+; CHECK: jnp .
+
+define i32 @fcmpSelectUneDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp une double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUneDouble:
+; CHECK: ucomisd
+; CHECK: je .
+; CHECK: jnp .
+
+define i32 @fcmpSelectUnoFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp uno float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUnoFloat:
+; CHECK: ucomiss
+; CHECK: jp .
+
+define i32 @fcmpSelectUnoDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp uno double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectUnoDouble:
+; CHECK: ucomisd
+; CHECK: jp .
+
+define i32 @fcmpSelectTrueFloat(float %a, float %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp true float %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectTrueFloat:
+; CHECK: mov {{.*}}, 1
+
+define i32 @fcmpSelectTrueDouble(double %a, double %b, i32 %c, i32 %d) {
+entry:
+ %cmp = fcmp true double %a, %b
+ %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
+ ret i32 %cmp.ret_ext
+}
+; CHECK: fcmpSelectTrueDouble:
+; CHECK: mov {{.*}}, 1
+
define <4 x i32> @fcmpFalseVector(<4 x float> %a, <4 x float> %b) {
entry:
%res.trunc = fcmp false <4 x float> %a, %b
« no previous file with comments | « no previous file | crosstest/test_fcmp_main.cpp » ('j') | src/IceInstX86BaseImpl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698