diff options
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/comparisons_f32.ll | 57 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/comparisons_f64.ll | 56 |
2 files changed, 33 insertions, 80 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/comparisons_f32.ll b/llvm/test/CodeGen/WebAssembly/comparisons_f32.ll index 8051b25689d..91b937047fc 100644 --- a/llvm/test/CodeGen/WebAssembly/comparisons_f32.ll +++ b/llvm/test/CodeGen/WebAssembly/comparisons_f32.ll @@ -99,6 +99,7 @@ define i32 @oge_f32(float %x, float %y) { } ; Expanded comparisons, which also check for NaN. +; These simply rely on SDAG's Expand cond code action. ; CHECK-LABEL: ueq_f32: ; CHECK-NEXT: .param f32, f32{{$}} @@ -147,16 +148,10 @@ define i32 @one_f32(float %x, float %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.lt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f32.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f32.ge $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ult_f32(float %x, float %y) { %a = fcmp ult float %x, %y %b = zext i1 %a to i32 @@ -168,16 +163,10 @@ define i32 @ult_f32(float %x, float %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.le $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f32.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f32.gt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ule_f32(float %x, float %y) { %a = fcmp ule float %x, %y %b = zext i1 %a to i32 @@ -189,16 +178,10 @@ define i32 @ule_f32(float %x, float %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.gt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f32.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f32.le $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ugt_f32(float %x, float %y) { %a = fcmp ugt float %x, %y %b = zext i1 %a to i32 @@ -210,16 +193,10 @@ define i32 @ugt_f32(float %x, float %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.ge $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f32.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f32.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f32.lt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @uge_f32(float %x, float %y) { %a = fcmp uge float %x, %y %b = zext i1 %a to i32 diff --git a/llvm/test/CodeGen/WebAssembly/comparisons_f64.ll b/llvm/test/CodeGen/WebAssembly/comparisons_f64.ll index 6694f989627..1c6808a8b61 100644 --- a/llvm/test/CodeGen/WebAssembly/comparisons_f64.ll +++ b/llvm/test/CodeGen/WebAssembly/comparisons_f64.ll @@ -147,16 +147,10 @@ define i32 @one_f64(double %x, double %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.lt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f64.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f64.ge $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ult_f64(double %x, double %y) { %a = fcmp ult double %x, %y %b = zext i1 %a to i32 @@ -168,16 +162,10 @@ define i32 @ult_f64(double %x, double %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.le $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f64.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f64.gt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ule_f64(double %x, double %y) { %a = fcmp ule double %x, %y %b = zext i1 %a to i32 @@ -189,16 +177,10 @@ define i32 @ule_f64(double %x, double %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.gt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f64.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f64.le $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @ugt_f64(double %x, double %y) { %a = fcmp ugt double %x, %y %b = zext i1 %a to i32 @@ -210,16 +192,10 @@ define i32 @ugt_f64(double %x, double %y) { ; CHECK-NEXT: .result i32{{$}} ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.ge $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} -; CHECK-NEXT: get_local $push[[L2:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: get_local $push[[L3:[0-9]+]]=, 0{{$}} -; CHECK-NEXT: f64.ne $push[[NUM1:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}} -; CHECK-NEXT: get_local $push[[L4:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: get_local $push[[L5:[0-9]+]]=, 1{{$}} -; CHECK-NEXT: f64.ne $push[[NUM2:[0-9]+]]=, $pop[[L4]], $pop[[L5]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM3:[0-9]+]]=, $pop[[NUM1]], $pop[[NUM2]]{{$}} -; CHECK-NEXT: i32.or $push[[NUM4:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM3]]{{$}} -; CHECK-NEXT: return $pop[[NUM4]]{{$}} +; CHECK-NEXT: f64.lt $push[[NUM0:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} +; CHECK-NEXT: i32.const $push[[C0:[0-9]+]]=, 1 +; CHECK-NEXT: i32.xor $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[C0]]{{$}} +; CHECK-NEXT: return $pop[[NUM2]]{{$}} define i32 @uge_f64(double %x, double %y) { %a = fcmp uge double %x, %y %b = zext i1 %a to i32 |