From bba9221d9ffedd523de37f816c417562e2dd0ddb Mon Sep 17 00:00:00 2001 From: Samuel Parker Date: Tue, 17 Jan 2023 10:34:43 +0000 Subject: [PATCH] [NFC][WebAssembly] Update test Run update_llc_test_checks.py on address-offsets.ll --- llvm/test/CodeGen/WebAssembly/address-offsets.ll | 703 ++++++++++++++--------- 1 file changed, 442 insertions(+), 261 deletions(-) diff --git a/llvm/test/CodeGen/WebAssembly/address-offsets.ll b/llvm/test/CodeGen/WebAssembly/address-offsets.ll index 442400b..c483a43 100644 --- a/llvm/test/CodeGen/WebAssembly/address-offsets.ll +++ b/llvm/test/CodeGen/WebAssembly/address-offsets.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -relocation-model=pic | FileCheck %s -check-prefixes=CHECK,PIC - +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -relocation-model=pic | FileCheck %s ; Test folding constant offsets and symbols into load and store addresses under ; a variety of circumstances. @@ -8,22 +8,24 @@ target triple = "wasm32-unknown-emscripten" @g = external global [0 x i32], align 4 -; CHECK-LABEL: load_test0: -; CHECK-NEXT: .functype load_test0 () -> (i32){{$}} -; PIC-NEXT: global.get $push0=, g@GOT{{$}} -; PIC-NEXT: i32.load $push1=, 40($pop0){{$}} -; CHECK-NEXT: return $pop1{{$}} define i32 @load_test0() { +; CHECK-LABEL: load_test0: +; CHECK: .functype load_test0 () -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push0=, g@GOT +; CHECK-NEXT: i32.load $push1=, 40($pop0) +; CHECK-NEXT: return $pop1 %t = load i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), align 4 ret i32 %t } -; CHECK-LABEL: load_test0_noinbounds: -; CHECK-NEXT: .functype load_test0_noinbounds () -> (i32){{$}} -; PIC-NEXT: global.get $push0=, g@GOT{{$}} -; PIC-NEXT: i32.load $push1=, 40($pop0){{$}} -; CHECK-NEXT: return $pop1{{$}} define i32 @load_test0_noinbounds() { +; CHECK-LABEL: load_test0_noinbounds: +; CHECK: .functype load_test0_noinbounds () -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push0=, g@GOT +; CHECK-NEXT: i32.load $push1=, 40($pop0) +; CHECK-NEXT: return $pop1 %t = load i32, ptr getelementptr ([0 x i32], ptr @g, i32 0, i32 10), align 4 ret i32 %t } @@ -32,553 +34,732 @@ define i32 @load_test0_noinbounds() { ; (there are cases where the value in the reg can be negative). ; Likewise for stores. -; CHECK-LABEL: load_test1: -; CHECK-NEXT: .functype load_test1 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test1(i32 %n) { +; CHECK-LABEL: load_test1: +; CHECK: .functype load_test1 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add = add nsw i32 %n, 10 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test2: -; CHECK-NEXT: .functype load_test2 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test2(i32 %n) { +; CHECK-LABEL: load_test2: +; CHECK: .functype load_test2 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add = add nsw i32 10, %n %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test3: -; CHECK-NEXT: .functype load_test3 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test3(i32 %n) { +; CHECK-LABEL: load_test3: +; CHECK: .functype load_test3 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.load $push4=, 40($pop3) +; CHECK-NEXT: return $pop4 %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test4: -; CHECK-NEXT: .functype load_test4 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test4(i32 %n) { +; CHECK-LABEL: load_test4: +; CHECK: .functype load_test4 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add.ptr = getelementptr inbounds i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), i32 %n %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test5: -; CHECK-NEXT: .functype load_test5 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test5(i32 %n) { +; CHECK-LABEL: load_test5: +; CHECK: .functype load_test5 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add.ptr = getelementptr inbounds i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), i32 %n %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test6: -; CHECK-NEXT: .functype load_test6 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test6(i32 %n) { +; CHECK-LABEL: load_test6: +; CHECK: .functype load_test6 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add = add nsw i32 %n, 10 %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test7: -; CHECK-NEXT: .functype load_test7 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test7(i32 %n) { +; CHECK-LABEL: load_test7: +; CHECK: .functype load_test7 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.load $push4=, 40($pop3) +; CHECK-NEXT: return $pop4 %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test8: -; CHECK-NEXT: .functype load_test8 (i32) -> (i32){{$}} -; CHECK-NEX T: i32.const $push0=, 2{{$}} -; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} -; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} -; CHECK-NEX T: return $pop2{{$}} define i32 @load_test8(i32 %n) { +; CHECK-LABEL: load_test8: +; CHECK: .functype load_test8 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add = add nsw i32 10, %n %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test9: -; CHECK-NEXT: .functype load_test9 () -> (i32){{$}} - -; PIC-NEXT: global.get $push1=, g@GOT{{$}} -; PIC-NEXT: i32.const $push0=, -40{{$}} -; PIC-NEXT: i32.add $push2=, $pop1, $pop0{{$}} -; PIC-NEXT: i32.load $push3=, 0($pop2) -; PIC-NEXT: return $pop3{{$}} define i32 @load_test9() { +; CHECK-LABEL: load_test9: +; CHECK: .functype load_test9 () -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push1=, g@GOT +; CHECK-NEXT: i32.const $push0=, -40 +; CHECK-NEXT: i32.add $push2=, $pop1, $pop0 +; CHECK-NEXT: i32.load $push3=, 0($pop2) +; CHECK-NEXT: return $pop3 %t = load i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 1073741814), align 4 ret i32 %t } -; CHECK-LABEL: load_test10: -; CHECK-NEXT: .functype load_test10 (i32) -> (i32){{$}} - -; PIC-NEXT: i32.const $push0=, 2{{$}} -; PIC-NEXT: i32.shl $push1=, $0, $pop0{{$}} -; PIC-NEXT: global.get $push2=, g@GOT{{$}} -; PIC-NEXT: i32.add $push3=, $pop1, $pop2{{$}} -; PIC-NEXT: i32.const $push4=, -40{{$}} -; PIC-NEXT: i32.add $push5=, $pop3, $pop4{{$}} -; PIC-NEXT: i32.load $push6=, 0($pop5){{$}} -; PIC-NEXT: return $pop6{{$}} define i32 @load_test10(i32 %n) { +; CHECK-LABEL: load_test10: +; CHECK: .functype load_test10 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, -40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.load $push6=, 0($pop5) +; CHECK-NEXT: return $pop6 %add = add nsw i32 %n, -10 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test11: -; CHECK-NEXT: .functype load_test11 (i32) -> (i32){{$}} -; CHECK-NEXT: i32.load $push0=, 40($0){{$}} -; CHECK-NEXT: return $pop0{{$}} define i32 @load_test11(ptr %p) { +; CHECK-LABEL: load_test11: +; CHECK: .functype load_test11 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.load $push0=, 40($0) +; CHECK-NEXT: return $pop0 %arrayidx = getelementptr inbounds i32, ptr %p, i32 10 %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test11_noinbounds: -; CHECK-NEXT: .functype load_test11_noinbounds (i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 40{{$}} -; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} -; CHECK-NEXT: i32.load $push2=, 0($pop1){{$}} -; CHECK-NEXT: return $pop2{{$}} define i32 @load_test11_noinbounds(ptr %p) { +; CHECK-LABEL: load_test11_noinbounds: +; CHECK: .functype load_test11_noinbounds (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 40 +; CHECK-NEXT: i32.add $push1=, $0, $pop0 +; CHECK-NEXT: i32.load $push2=, 0($pop1) +; CHECK-NEXT: return $pop2 %arrayidx = getelementptr i32, ptr %p, i32 10 %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test12: -; CHECK-NEXT: .functype load_test12 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test12(ptr %p, i32 %n) { +; CHECK-LABEL: load_test12: +; CHECK: .functype load_test12 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add = add nsw i32 %n, 10 %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test13: -; CHECK-NEXT: .functype load_test13 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test13(ptr %p, i32 %n) { +; CHECK-LABEL: load_test13: +; CHECK: .functype load_test13 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add = add nsw i32 10, %n %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test14: -; CHECK-NEXT: .functype load_test14 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} -; CHECK-NEXT: i32.load $push3=, 40($pop2){{$}} -; CHECK-NEXT: return $pop3{{$}} define i32 @load_test14(ptr %p, i32 %n) { +; CHECK-LABEL: load_test14: +; CHECK: .functype load_test14 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.load $push3=, 40($pop2) +; CHECK-NEXT: return $pop3 %add.ptr = getelementptr inbounds i32, ptr %p, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test15: -; CHECK-NEXT: .functype load_test15 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test15(ptr %p, i32 %n) { +; CHECK-LABEL: load_test15: +; CHECK: .functype load_test15 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add.ptr = getelementptr inbounds i32, ptr %p, i32 10 %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 %n %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test16: -; CHECK-NEXT: .functype load_test16 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test16(ptr %p, i32 %n) { +; CHECK-LABEL: load_test16: +; CHECK: .functype load_test16 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add.ptr = getelementptr inbounds i32, ptr %p, i32 10 %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 %n %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test17: -; CHECK-NEXT: .functype load_test17 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test17(ptr %p, i32 %n) { +; CHECK-LABEL: load_test17: +; CHECK: .functype load_test17 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add = add nsw i32 %n, 10 %add.ptr = getelementptr inbounds i32, ptr %p, i32 %add %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test18: -; CHECK-NEXT: .functype load_test18 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} -; CHECK-NEXT: i32.load $push3=, 40($pop2){{$}} -; CHECK-NEXT: return $pop3{{$}} define i32 @load_test18(ptr %p, i32 %n) { +; CHECK-LABEL: load_test18: +; CHECK: .functype load_test18 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.load $push3=, 40($pop2) +; CHECK-NEXT: return $pop3 %add.ptr = getelementptr inbounds i32, ptr %p, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 %t = load i32, ptr %add.ptr1, align 4 ret i32 %t } -; CHECK-LABEL: load_test19: -; CHECK-NEXT: .functype load_test19 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} -; CHECK-NEXT: i32.const $push3=, 40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test19(ptr %p, i32 %n) { +; CHECK-LABEL: load_test19: +; CHECK: .functype load_test19 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add = add nsw i32 10, %n %add.ptr = getelementptr inbounds i32, ptr %p, i32 %add %t = load i32, ptr %add.ptr, align 4 ret i32 %t } -; CHECK-LABEL: load_test20: -; CHECK-NEXT: .functype load_test20 (i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, -40{{$}} -; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} -; CHECK-NEXT: i32.load $push2=, 0($pop1){{$}} -; CHECK-NEXT: return $pop2{{$}} define i32 @load_test20(ptr %p) { +; CHECK-LABEL: load_test20: +; CHECK: .functype load_test20 (i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, -40 +; CHECK-NEXT: i32.add $push1=, $0, $pop0 +; CHECK-NEXT: i32.load $push2=, 0($pop1) +; CHECK-NEXT: return $pop2 %arrayidx = getelementptr inbounds i32, ptr %p, i32 -10 %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: load_test21: -; CHECK-NEXT: .functype load_test21 (i32, i32) -> (i32){{$}} -; CHECK-NEXT: i32.const $push0=, 2{{$}} -; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} -; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} -; CHECK-NEXT: i32.const $push3=, -40{{$}} -; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} -; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} -; CHECK-NEXT: return $pop5{{$}} define i32 @load_test21(ptr %p, i32 %n) { +; CHECK-LABEL: load_test21: +; CHECK: .functype load_test21 (i32, i32) -> (i32) +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, -40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.load $push5=, 0($pop4) +; CHECK-NEXT: return $pop5 %add = add nsw i32 %n, -10 %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add %t = load i32, ptr %arrayidx, align 4 ret i32 %t } -; CHECK-LABEL: store_test0: -; CHECK-NEXT: .functype store_test0 (i32) -> (){{$}} -; PIC-NEXT: global.get $push0=, g@GOT{{$}} -; PIC-NEXT: i32.store 40($pop0), $0 -; CHECK-NEXT: return{{$}} define void @store_test0(i32 %i) { +; CHECK-LABEL: store_test0: +; CHECK: .functype store_test0 (i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push0=, g@GOT +; CHECK-NEXT: i32.store 40($pop0), $0 +; CHECK-NEXT: return store i32 %i, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), align 4 ret void } -; CHECK-LABEL: store_test0_noinbounds: -; CHECK-NEXT: .functype store_test0_noinbounds (i32) -> (){{$}} -; PIC-NEXT: global.get $push0=, g@GOT{{$}} -; PIC-NEXT: i32.store 40($pop0), $0{{$}} -; CHECK-NEXT: return{{$}} define void @store_test0_noinbounds(i32 %i) { +; CHECK-LABEL: store_test0_noinbounds: +; CHECK: .functype store_test0_noinbounds (i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push0=, g@GOT +; CHECK-NEXT: i32.store 40($pop0), $0 +; CHECK-NEXT: return store i32 %i, ptr getelementptr ([0 x i32], ptr @g, i32 0, i32 10), align 4 ret void } -; CHECK-LABEL: store_test1: -; CHECK-NEXT: .functype store_test1 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test1(i32 %n, i32 %i) { +; CHECK-LABEL: store_test1: +; CHECK: .functype store_test1 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add = add nsw i32 %n, 10 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test2: -; CHECK-NEXT: .functype store_test2 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test2(i32 %n, i32 %i) { +; CHECK-LABEL: store_test2: +; CHECK: .functype store_test2 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add = add nsw i32 10, %n %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test3: -; CHECK-NEXT: .functype store_test3 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test3(i32 %n, i32 %i) { +; CHECK-LABEL: store_test3: +; CHECK: .functype store_test3 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.store 40($pop3), $1 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test4: -; CHECK-NEXT: .functype store_test4 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test4(i32 %n, i32 %i) { +; CHECK-LABEL: store_test4: +; CHECK: .functype store_test4 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), i32 %n store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test5: -; CHECK-NEXT: .functype store_test5 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test5(i32 %n, i32 %i) { +; CHECK-LABEL: store_test5: +; CHECK: .functype store_test5 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), i32 %n store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test6: -; CHECK-NEXT: .functype store_test6 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test6(i32 %n, i32 %i) { +; CHECK-LABEL: store_test6: +; CHECK: .functype store_test6 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add = add nsw i32 %n, 10 %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test7: -; CHECK-NEXT: .functype store_test7 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test7(i32 %n, i32 %i) { +; CHECK-LABEL: store_test7: +; CHECK: .functype store_test7 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: i32.add $push3=, $pop2, $pop1 +; CHECK-NEXT: i32.store 40($pop3), $1 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test8: -; CHECK-NEXT: .functype store_test8 (i32, i32) -> (){{$}} -; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} -; CHECK-NEX T: return{{$}} define void @store_test8(i32 %n, i32 %i) { +; CHECK-LABEL: store_test8: +; CHECK: .functype store_test8 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, 40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add = add nsw i32 10, %n %add.ptr = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test9: -; CHECK-NEXT: .functype store_test9 (i32) -> (){{$}} -; PIC-NEXT: global.get $push1=, g@GOT{{$}} -; PIC-NEXT: i32.const $push0=, -40{{$}} -; PIC-NEXT: i32.add $push2=, $pop1, $pop0{{$}} -; PIC-NEXT: i32.store 0($pop2), $0 -; CHECK-NEXT: return{{$}} define void @store_test9(i32 %i) { +; CHECK-LABEL: store_test9: +; CHECK: .functype store_test9 (i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: global.get $push1=, g@GOT +; CHECK-NEXT: i32.const $push0=, -40 +; CHECK-NEXT: i32.add $push2=, $pop1, $pop0 +; CHECK-NEXT: i32.store 0($pop2), $0 +; CHECK-NEXT: return store i32 %i, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 1073741814), align 4 ret void } -; CHECK-LABEL: store_test10: -; CHECK-NEXT: .functype store_test10 (i32, i32) -> (){{$}} -; PIC-NEXT: i32.const $push0=, 2{{$}} -; PIC-NEXT: i32.shl $push1=, $0, $pop0{{$}} -; PIC-NEXT: global.get $push2=, g@GOT{{$}} -; PIC-NEXT: i32.add $push3=, $pop1, $pop2{{$}} -; PIC-NEXT: i32.const $push4=, -40{{$}} -; PIC-NEXT: i32.add $push5=, $pop3, $pop4{{$}} -; PIC-NEXT: i32.store 0($pop5), $1{{$}} -; CHECK-NEXT: return{{$}} define void @store_test10(i32 %n, i32 %i) { +; CHECK-LABEL: store_test10: +; CHECK: .functype store_test10 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $0, $pop0 +; CHECK-NEXT: global.get $push2=, g@GOT +; CHECK-NEXT: i32.add $push3=, $pop1, $pop2 +; CHECK-NEXT: i32.const $push4=, -40 +; CHECK-NEXT: i32.add $push5=, $pop3, $pop4 +; CHECK-NEXT: i32.store 0($pop5), $1 +; CHECK-NEXT: return %add = add nsw i32 %n, -10 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i32 0, i32 %add store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test11: -; CHECK-NEXT: .functype store_test11 (i32, i32) -> (){{$}} -; CHECK-NEXT: i32.store 40($0), $1{{$}} -; CHECK-NEXT: return{{$}} define void @store_test11(ptr %p, i32 %i) { +; CHECK-LABEL: store_test11: +; CHECK: .functype store_test11 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.store 40($0), $1 +; CHECK-NEXT: return %arrayidx = getelementptr inbounds i32, ptr %p, i32 10 store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test11_noinbounds: -; CHECK-NEXT: .functype store_test11_noinbounds (i32, i32) -> (){{$}} -; CHECK-NEXT: i32.const $push0=, 40{{$}} -; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} -; CHECK-NEXT: i32.store 0($pop1), $1{{$}} -; CHECK-NEXT: return{{$}} define void @store_test11_noinbounds(ptr %p, i32 %i) { +; CHECK-LABEL: store_test11_noinbounds: +; CHECK: .functype store_test11_noinbounds (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 40 +; CHECK-NEXT: i32.add $push1=, $0, $pop0 +; CHECK-NEXT: i32.store 0($pop1), $1 +; CHECK-NEXT: return %arrayidx = getelementptr i32, ptr %p, i32 10 store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test12: -; CHECK-NEXT: .functype store_test12 (i32, i32, i32) -> (){{$}} define void @store_test12(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test12: +; CHECK: .functype store_test12 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add = add nsw i32 %n, 10 %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test13: -; CHECK-NEXT: .functype store_test13 (i32, i32, i32) -> (){{$}} define void @store_test13(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test13: +; CHECK: .functype store_test13 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add = add nsw i32 10, %n %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test14: -; CHECK-NEXT: .functype store_test14 (i32, i32, i32) -> (){{$}} define void @store_test14(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test14: +; CHECK: .functype store_test14 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.store 40($pop2), $2 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr %p, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test15: -; CHECK-NEXT: .functype store_test15 (i32, i32, i32) -> (){{$}} define void @store_test15(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test15: +; CHECK: .functype store_test15 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr %p, i32 10 %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 %n store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test16: -; CHECK-NEXT: .functype store_test16 (i32, i32, i32) -> (){{$}} define void @store_test16(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test16: +; CHECK: .functype store_test16 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr %p, i32 10 %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 %n store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test17: -; CHECK-NEXT: .functype store_test17 (i32, i32, i32) -> (){{$}} define void @store_test17(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test17: +; CHECK: .functype store_test17 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add = add nsw i32 %n, 10 %add.ptr = getelementptr inbounds i32, ptr %p, i32 %add store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test18: -; CHECK-NEXT: .functype store_test18 (i32, i32, i32) -> (){{$}} define void @store_test18(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test18: +; CHECK: .functype store_test18 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $0, $pop1 +; CHECK-NEXT: i32.store 40($pop2), $2 +; CHECK-NEXT: return %add.ptr = getelementptr inbounds i32, ptr %p, i32 %n %add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i32 10 store i32 %i, ptr %add.ptr1, align 4 ret void } -; CHECK-LABEL: store_test19: -; CHECK-NEXT: .functype store_test19 (i32, i32, i32) -> (){{$}} define void @store_test19(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test19: +; CHECK: .functype store_test19 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, 40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add = add nsw i32 10, %n %add.ptr = getelementptr inbounds i32, ptr %p, i32 %add store i32 %i, ptr %add.ptr, align 4 ret void } -; CHECK-LABEL: store_test20: -; CHECK-NEXT: .functype store_test20 (i32, i32) -> (){{$}} define void @store_test20(ptr %p, i32 %i) { +; CHECK-LABEL: store_test20: +; CHECK: .functype store_test20 (i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, -40 +; CHECK-NEXT: i32.add $push1=, $0, $pop0 +; CHECK-NEXT: i32.store 0($pop1), $1 +; CHECK-NEXT: return %arrayidx = getelementptr inbounds i32, ptr %p, i32 -10 store i32 %i, ptr %arrayidx, align 4 ret void } -; CHECK-LABEL: store_test21: -; CHECK-NEXT: .functype store_test21 (i32, i32, i32) -> (){{$}} define void @store_test21(ptr %p, i32 %n, i32 %i) { +; CHECK-LABEL: store_test21: +; CHECK: .functype store_test21 (i32, i32, i32) -> () +; CHECK-NEXT: # %bb.0: +; CHECK-NEXT: i32.const $push0=, 2 +; CHECK-NEXT: i32.shl $push1=, $1, $pop0 +; CHECK-NEXT: i32.add $push2=, $pop1, $0 +; CHECK-NEXT: i32.const $push3=, -40 +; CHECK-NEXT: i32.add $push4=, $pop2, $pop3 +; CHECK-NEXT: i32.store 0($pop4), $2 +; CHECK-NEXT: return %add = add nsw i32 %n, -10 %arrayidx = getelementptr inbounds i32, ptr %p, i32 %add store i32 %i, ptr %arrayidx, align 4 -- 2.7.4