; 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


; Test folding constant offsets and symbols into load and store addresses under
; a variety of circumstances.

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() {
  %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @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() {
  %t = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4
  ret i32 %t
}

; TODO: load_test1 - load_test8 are disabled because folding GA+reg is disabled
; (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) {
  %add = add nsw i32 %n, 10
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  %t = load i32, i32* %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) {
  %add = add nsw i32 10, %n
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  %t = load i32, i32* %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) {
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  %t = load i32, i32* %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) {
  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
  %t = load i32, i32* %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) {
  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
  %t = load i32, i32* %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) {
  %add = add nsw i32 %n, 10
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  %t = load i32, i32* %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) {
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  %t = load i32, i32* %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) {
  %add = add nsw i32 10, %n
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  %t = load i32, i32* %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() {
  %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @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) {
  %add = add nsw i32 %n, -10
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  %t = load i32, i32* %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(i32* %p) {
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 10
  %t = load i32, i32* %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(i32* %p) {
  %arrayidx = getelementptr i32, i32* %p, i32 10
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add = add nsw i32 %n, 10
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add = add nsw i32 10, %n
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add = add nsw i32 %n, 10
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add = add nsw i32 10, %n
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
  %t = load i32, i32* %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(i32* %p) {
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10
  %t = load i32, i32* %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(i32* %p, i32 %n) {
  %add = add nsw i32 %n, -10
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  %t = load i32, i32* %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) {
  store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @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) {
  store i32 %i, i32* getelementptr ([0 x i32], [0 x i32]* @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) {
  %add = add nsw i32 %n, 10
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  store i32 %i, i32* %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) {
  %add = add nsw i32 10, %n
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  store i32 %i, i32* %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) {
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  store i32 %i, i32* %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) {
  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
  store i32 %i, i32* %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) {
  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
  store i32 %i, i32* %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) {
  %add = add nsw i32 %n, 10
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  store i32 %i, i32* %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) {
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  store i32 %i, i32* %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) {
  %add = add nsw i32 10, %n
  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  store i32 %i, i32* %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) {
  store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @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) {
  %add = add nsw i32 %n, -10
  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
  store i32 %i, i32* %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(i32* %p, i32 %i) {
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 10
  store i32 %i, i32* %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(i32* %p, i32 %i) {
  %arrayidx = getelementptr i32, i32* %p, i32 10
  store i32 %i, i32* %arrayidx, align 4
  ret void
}

; CHECK-LABEL: store_test12:
; CHECK-NEXT: .functype store_test12 (i32, i32, i32) -> (){{$}}
define void @store_test12(i32* %p, i32 %n, i32 %i) {
  %add = add nsw i32 %n, 10
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  store i32 %i, i32* %arrayidx, align 4
  ret void
}

; CHECK-LABEL: store_test13:
; CHECK-NEXT: .functype store_test13 (i32, i32, i32) -> (){{$}}
define void @store_test13(i32* %p, i32 %n, i32 %i) {
  %add = add nsw i32 10, %n
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  store i32 %i, i32* %arrayidx, align 4
  ret void
}

; CHECK-LABEL: store_test14:
; CHECK-NEXT: .functype store_test14 (i32, i32, i32) -> (){{$}}
define void @store_test14(i32* %p, i32 %n, i32 %i) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  store i32 %i, i32* %add.ptr1, align 4
  ret void
}

; CHECK-LABEL: store_test15:
; CHECK-NEXT: .functype store_test15 (i32, i32, i32) -> (){{$}}
define void @store_test15(i32* %p, i32 %n, i32 %i) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
  store i32 %i, i32* %add.ptr1, align 4
  ret void
}

; CHECK-LABEL: store_test16:
; CHECK-NEXT: .functype store_test16 (i32, i32, i32) -> (){{$}}
define void @store_test16(i32* %p, i32 %n, i32 %i) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
  store i32 %i, i32* %add.ptr1, align 4
  ret void
}

; CHECK-LABEL: store_test17:
; CHECK-NEXT: .functype store_test17 (i32, i32, i32) -> (){{$}}
define void @store_test17(i32* %p, i32 %n, i32 %i) {
  %add = add nsw i32 %n, 10
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
  store i32 %i, i32* %add.ptr, align 4
  ret void
}

; CHECK-LABEL: store_test18:
; CHECK-NEXT: .functype store_test18 (i32, i32, i32) -> (){{$}}
define void @store_test18(i32* %p, i32 %n, i32 %i) {
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
  store i32 %i, i32* %add.ptr1, align 4
  ret void
}

; CHECK-LABEL: store_test19:
; CHECK-NEXT: .functype store_test19 (i32, i32, i32) -> (){{$}}
define void @store_test19(i32* %p, i32 %n, i32 %i) {
  %add = add nsw i32 10, %n
  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
  store i32 %i, i32* %add.ptr, align 4
  ret void
}

; CHECK-LABEL: store_test20:
; CHECK-NEXT: .functype store_test20 (i32, i32) -> (){{$}}
define void @store_test20(i32* %p, i32 %i) {
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10
  store i32 %i, i32* %arrayidx, align 4
  ret void
}

; CHECK-LABEL: store_test21:
; CHECK-NEXT: .functype store_test21 (i32, i32, i32) -> (){{$}}
define void @store_test21(i32* %p, i32 %n, i32 %i) {
  %add = add nsw i32 %n, -10
  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
  store i32 %i, i32* %arrayidx, align 4
  ret void
}
