summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/WebAssembly
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2015-11-25 22:13:48 +0000
committerDan Gohman <dan433584@gmail.com>2015-11-25 22:13:48 +0000
commitd9b42188314df597558baf719218d2d0cd332905 (patch)
tree6fcbc3f5820d7d9a60a33f2335b7e5be87ec566b /llvm/test/CodeGen/WebAssembly
parentdbb2f6188d129a91b1b6c0b4d37c50ede40df908 (diff)
downloadbcm5719-llvm-d9b42188314df597558baf719218d2d0cd332905.tar.gz
bcm5719-llvm-d9b42188314df597558baf719218d2d0cd332905.zip
[WebAssembly] Fold setne and seteq comparisons into selects.
llvm-svn: 254104
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly')
-rw-r--r--llvm/test/CodeGen/WebAssembly/select.ll160
1 files changed, 126 insertions, 34 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/select.ll b/llvm/test/CodeGen/WebAssembly/select.ll
index eab7720b556..1b1d7aed715 100644
--- a/llvm/test/CodeGen/WebAssembly/select.ll
+++ b/llvm/test/CodeGen/WebAssembly/select.ll
@@ -6,38 +6,130 @@
target datalayout = "e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
-; CHECK-LABEL: select_i32:
-; CHECK: i32.eq $push[[NUM1:[0-9]+]]=, $2, $pop[[NUM0:[0-9]+]]{{$}}
-; CHECK: i32.select $push{{[0-9]+}}=, $pop[[NUM1]], $0, $1{{$}}
-define i32 @select_i32(i32 %a, i32 %b, i32 %cond) {
- %cc = icmp eq i32 %cond, 0
- %result = select i1 %cc, i32 %a, i32 %b
- ret i32 %result
-}
-
-; CHECK-LABEL: select_i64:
-; CHECK: i32.eq $push[[NUM1:[0-9]+]]=, $2, $pop[[NUM0:[0-9]+]]{{$}}
-; CHECK: i64.select $push{{[0-9]+}}=, $pop[[NUM1]], $0, $1{{$}}
-define i64 @select_i64(i64 %a, i64 %b, i32 %cond) {
- %cc = icmp eq i32 %cond, 0
- %result = select i1 %cc, i64 %a, i64 %b
- ret i64 %result
-}
-
-; CHECK-LABEL: select_f32:
-; CHECK: i32.eq $push[[NUM1:[0-9]+]]=, $2, $pop[[NUM0:[0-9]+]]{{$}}
-; CHECK: f32.select $push{{[0-9]+}}=, $pop[[NUM1]], $0, $1{{$}}
-define float @select_f32(float %a, float %b, i32 %cond) {
- %cc = icmp eq i32 %cond, 0
- %result = select i1 %cc, float %a, float %b
- ret float %result
-}
-
-; CHECK-LABEL: select_f64:
-; CHECK: i32.eq $push[[NUM1:[0-9]+]]=, $2, $pop[[NUM0:[0-9]+]]{{$}}
-; CHECK: f64.select $push{{[0-9]+}}=, $pop[[NUM1]], $0, $1{{$}}
-define double @select_f64(double %a, double %b, i32 %cond) {
- %cc = icmp eq i32 %cond, 0
- %result = select i1 %cc, double %a, double %b
- ret double %result
+; CHECK-LABEL: select_i32_bool:
+; CHECK-NEXT: .param i32, i32, i32{{$}}
+; CHECK-NEXT: .result i32{{$}}
+; CHECK-NEXT: i32.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i32 @select_i32_bool(i1 zeroext %a, i32 %b, i32 %c) {
+ %cond = select i1 %a, i32 %b, i32 %c
+ ret i32 %cond
+}
+
+; CHECK-LABEL: select_i32_eq:
+; CHECK-NEXT: .param i32, i32, i32{{$}}
+; CHECK-NEXT: .result i32{{$}}
+; CHECK-NEXT: i32.select $push0=, $0, $2, $1{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i32 @select_i32_eq(i32 %a, i32 %b, i32 %c) {
+ %cmp = icmp eq i32 %a, 0
+ %cond = select i1 %cmp, i32 %b, i32 %c
+ ret i32 %cond
+}
+
+; CHECK-LABEL: select_i32_ne:
+; CHECK-NEXT: .param i32, i32, i32{{$}}
+; CHECK-NEXT: .result i32{{$}}
+; CHECK-NEXT: i32.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i32 @select_i32_ne(i32 %a, i32 %b, i32 %c) {
+ %cmp = icmp ne i32 %a, 0
+ %cond = select i1 %cmp, i32 %b, i32 %c
+ ret i32 %cond
+}
+
+; CHECK-LABEL: select_i64_bool:
+; CHECK-NEXT: .param i32, i64, i64{{$}}
+; CHECK-NEXT: .result i64{{$}}
+; CHECK-NEXT: i64.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @select_i64_bool(i1 zeroext %a, i64 %b, i64 %c) {
+ %cond = select i1 %a, i64 %b, i64 %c
+ ret i64 %cond
+}
+
+; CHECK-LABEL: select_i64_eq:
+; CHECK-NEXT: .param i32, i64, i64{{$}}
+; CHECK-NEXT: .result i64{{$}}
+; CHECK-NEXT: i64.select $push0=, $0, $2, $1{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @select_i64_eq(i32 %a, i64 %b, i64 %c) {
+ %cmp = icmp eq i32 %a, 0
+ %cond = select i1 %cmp, i64 %b, i64 %c
+ ret i64 %cond
+}
+
+; CHECK-LABEL: select_i64_ne:
+; CHECK-NEXT: .param i32, i64, i64{{$}}
+; CHECK-NEXT: .result i64{{$}}
+; CHECK-NEXT: i64.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @select_i64_ne(i32 %a, i64 %b, i64 %c) {
+ %cmp = icmp ne i32 %a, 0
+ %cond = select i1 %cmp, i64 %b, i64 %c
+ ret i64 %cond
+}
+
+; CHECK-LABEL: select_f32_bool:
+; CHECK-NEXT: .param i32, f32, f32{{$}}
+; CHECK-NEXT: .result f32{{$}}
+; CHECK-NEXT: f32.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define float @select_f32_bool(i1 zeroext %a, float %b, float %c) {
+ %cond = select i1 %a, float %b, float %c
+ ret float %cond
+}
+
+; CHECK-LABEL: select_f32_eq:
+; CHECK-NEXT: .param i32, f32, f32{{$}}
+; CHECK-NEXT: .result f32{{$}}
+; CHECK-NEXT: f32.select $push0=, $0, $2, $1{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define float @select_f32_eq(i32 %a, float %b, float %c) {
+ %cmp = icmp eq i32 %a, 0
+ %cond = select i1 %cmp, float %b, float %c
+ ret float %cond
+}
+
+; CHECK-LABEL: select_f32_ne:
+; CHECK-NEXT: .param i32, f32, f32{{$}}
+; CHECK-NEXT: .result f32{{$}}
+; CHECK-NEXT: f32.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define float @select_f32_ne(i32 %a, float %b, float %c) {
+ %cmp = icmp ne i32 %a, 0
+ %cond = select i1 %cmp, float %b, float %c
+ ret float %cond
+}
+
+; CHECK-LABEL: select_f64_bool:
+; CHECK-NEXT: .param i32, f64, f64{{$}}
+; CHECK-NEXT: .result f64{{$}}
+; CHECK-NEXT: f64.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define double @select_f64_bool(i1 zeroext %a, double %b, double %c) {
+ %cond = select i1 %a, double %b, double %c
+ ret double %cond
+}
+
+; CHECK-LABEL: select_f64_eq:
+; CHECK-NEXT: .param i32, f64, f64{{$}}
+; CHECK-NEXT: .result f64{{$}}
+; CHECK-NEXT: f64.select $push0=, $0, $2, $1{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define double @select_f64_eq(i32 %a, double %b, double %c) {
+ %cmp = icmp eq i32 %a, 0
+ %cond = select i1 %cmp, double %b, double %c
+ ret double %cond
+}
+
+; CHECK-LABEL: select_f64_ne:
+; CHECK-NEXT: .param i32, f64, f64{{$}}
+; CHECK-NEXT: .result f64{{$}}
+; CHECK-NEXT: f64.select $push0=, $0, $1, $2{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define double @select_f64_ne(i32 %a, double %b, double %c) {
+ %cmp = icmp ne i32 %a, 0
+ %cond = select i1 %cmp, double %b, double %c
+ ret double %cond
}
OpenPOWER on IntegriCloud