diff options
Diffstat (limited to 'test/CodeGen/WebAssembly/i32.ll')
-rw-r--r-- | test/CodeGen/WebAssembly/i32.ll | 88 |
1 files changed, 64 insertions, 24 deletions
diff --git a/test/CodeGen/WebAssembly/i32.ll b/test/CodeGen/WebAssembly/i32.ll index a07dd02beced..e451695d8903 100644 --- a/test/CodeGen/WebAssembly/i32.ll +++ b/test/CodeGen/WebAssembly/i32.ll @@ -3,7 +3,7 @@ ; Test that basic 32-bit integer operations assemble as expected. target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" -target triple = "wasm32-unknown-unknown" +target triple = "wasm32-unknown-unknown-wasm" declare i32 @llvm.ctlz.i32(i32, i1) declare i32 @llvm.cttz.i32(i32, i1) @@ -12,7 +12,9 @@ declare i32 @llvm.ctpop.i32(i32) ; CHECK-LABEL: add32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.add $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.add $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @add32(i32 %x, i32 %y) { %a = add i32 %x, %y @@ -22,7 +24,9 @@ define i32 @add32(i32 %x, i32 %y) { ; CHECK-LABEL: sub32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.sub $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.sub $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @sub32(i32 %x, i32 %y) { %a = sub i32 %x, %y @@ -32,7 +36,9 @@ define i32 @sub32(i32 %x, i32 %y) { ; CHECK-LABEL: mul32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.mul $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.mul $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @mul32(i32 %x, i32 %y) { %a = mul i32 %x, %y @@ -42,7 +48,9 @@ define i32 @mul32(i32 %x, i32 %y) { ; CHECK-LABEL: sdiv32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.div_s $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.div_s $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @sdiv32(i32 %x, i32 %y) { %a = sdiv i32 %x, %y @@ -52,7 +60,9 @@ define i32 @sdiv32(i32 %x, i32 %y) { ; CHECK-LABEL: udiv32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.div_u $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.div_u $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @udiv32(i32 %x, i32 %y) { %a = udiv i32 %x, %y @@ -62,7 +72,9 @@ define i32 @udiv32(i32 %x, i32 %y) { ; CHECK-LABEL: srem32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rem_s $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rem_s $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @srem32(i32 %x, i32 %y) { %a = srem i32 %x, %y @@ -72,7 +84,9 @@ define i32 @srem32(i32 %x, i32 %y) { ; CHECK-LABEL: urem32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rem_u $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rem_u $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @urem32(i32 %x, i32 %y) { %a = urem i32 %x, %y @@ -82,7 +96,9 @@ define i32 @urem32(i32 %x, i32 %y) { ; CHECK-LABEL: and32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.and $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.and $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @and32(i32 %x, i32 %y) { %a = and i32 %x, %y @@ -92,7 +108,9 @@ define i32 @and32(i32 %x, i32 %y) { ; CHECK-LABEL: or32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.or $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.or $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @or32(i32 %x, i32 %y) { %a = or i32 %x, %y @@ -102,7 +120,9 @@ define i32 @or32(i32 %x, i32 %y) { ; CHECK-LABEL: xor32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.xor $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.xor $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @xor32(i32 %x, i32 %y) { %a = xor i32 %x, %y @@ -112,7 +132,9 @@ define i32 @xor32(i32 %x, i32 %y) { ; CHECK-LABEL: shl32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.shl $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.shl $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @shl32(i32 %x, i32 %y) { %a = shl i32 %x, %y @@ -122,7 +144,9 @@ define i32 @shl32(i32 %x, i32 %y) { ; CHECK-LABEL: shr32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.shr_u $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.shr_u $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @shr32(i32 %x, i32 %y) { %a = lshr i32 %x, %y @@ -132,7 +156,9 @@ define i32 @shr32(i32 %x, i32 %y) { ; CHECK-LABEL: sar32: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.shr_s $push0=, $0, $1{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.shr_s $push0=, $pop[[L0]], $pop[[L1]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @sar32(i32 %x, i32 %y) { %a = ashr i32 %x, %y @@ -142,7 +168,8 @@ define i32 @sar32(i32 %x, i32 %y) { ; CHECK-LABEL: clz32: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.clz $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.clz $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @clz32(i32 %x) { %a = call i32 @llvm.ctlz.i32(i32 %x, i1 false) @@ -152,7 +179,8 @@ define i32 @clz32(i32 %x) { ; CHECK-LABEL: clz32_zero_undef: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.clz $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.clz $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @clz32_zero_undef(i32 %x) { %a = call i32 @llvm.ctlz.i32(i32 %x, i1 true) @@ -162,7 +190,8 @@ define i32 @clz32_zero_undef(i32 %x) { ; CHECK-LABEL: ctz32: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.ctz $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.ctz $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @ctz32(i32 %x) { %a = call i32 @llvm.cttz.i32(i32 %x, i1 false) @@ -172,7 +201,8 @@ define i32 @ctz32(i32 %x) { ; CHECK-LABEL: ctz32_zero_undef: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.ctz $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.ctz $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @ctz32_zero_undef(i32 %x) { %a = call i32 @llvm.cttz.i32(i32 %x, i1 true) @@ -182,7 +212,8 @@ define i32 @ctz32_zero_undef(i32 %x) { ; CHECK-LABEL: popcnt32: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.popcnt $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.popcnt $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @popcnt32(i32 %x) { %a = call i32 @llvm.ctpop.i32(i32 %x) @@ -192,7 +223,8 @@ define i32 @popcnt32(i32 %x) { ; CHECK-LABEL: eqz32: ; CHECK-NEXT: .param i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.eqz $push0=, $0{{$}} +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: i32.eqz $push0=, $pop[[L0]]{{$}} ; CHECK-NEXT: return $pop0{{$}} define i32 @eqz32(i32 %x) { %a = icmp eq i32 %x, 0 @@ -203,7 +235,9 @@ define i32 @eqz32(i32 %x) { ; CHECK-LABEL: rotl: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rotl $push0=, $0, $1 +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rotl $push0=, $pop[[L0]], $pop[[L1]] ; CHECK-NEXT: return $pop0{{$}} define i32 @rotl(i32 %x, i32 %y) { %z = sub i32 32, %y @@ -216,7 +250,9 @@ define i32 @rotl(i32 %x, i32 %y) { ; CHECK-LABEL: masked_rotl: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rotl $push0=, $0, $1 +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rotl $push0=, $pop[[L0]], $pop[[L1]] ; CHECK-NEXT: return $pop0{{$}} define i32 @masked_rotl(i32 %x, i32 %y) { %a = and i32 %y, 31 @@ -230,7 +266,9 @@ define i32 @masked_rotl(i32 %x, i32 %y) { ; CHECK-LABEL: rotr: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rotr $push0=, $0, $1 +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rotr $push0=, $pop[[L0]], $pop[[L1]] ; CHECK-NEXT: return $pop0{{$}} define i32 @rotr(i32 %x, i32 %y) { %z = sub i32 32, %y @@ -243,7 +281,9 @@ define i32 @rotr(i32 %x, i32 %y) { ; CHECK-LABEL: masked_rotr: ; CHECK-NEXT: .param i32, i32{{$}} ; CHECK-NEXT: .result i32{{$}} -; CHECK-NEXT: i32.rotr $push0=, $0, $1 +; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}} +; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}} +; CHECK-NEXT: i32.rotr $push0=, $pop[[L0]], $pop[[L1]] ; CHECK-NEXT: return $pop0{{$}} define i32 @masked_rotr(i32 %x, i32 %y) { %a = and i32 %y, 31 |