151cd326fSThomas Lively; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
251cd326fSThomas Lively; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s
3e1f67a8bSThomas Lively
4e1f67a8bSThomas Lively; Test SIMD loads and stores
5e1f67a8bSThomas Lively
6e1f67a8bSThomas Livelytarget triple = "wasm32-unknown-unknown"
7e1f67a8bSThomas Lively
8e1f67a8bSThomas Lively; ==============================================================================
9e1f67a8bSThomas Lively; 16 x i8
10e1f67a8bSThomas Lively; ==============================================================================
11e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8(<16 x i8>* %p) {
1251cd326fSThomas Lively; CHECK-LABEL: load_v16i8:
1351cd326fSThomas Lively; CHECK:         .functype load_v16i8 (i32) -> (v128)
1451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
1551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1651cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
1751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
18e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %p
19e1f67a8bSThomas Lively  ret <16 x i8> %v
20e1f67a8bSThomas Lively}
21e1f67a8bSThomas Lively
2299d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8(i8* %p) {
2351cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8:
2451cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8 (i32) -> (v128)
2551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
2651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
27a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 0
2851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2999d3dd28SThomas Lively  %e = load i8, i8* %p
3099d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
3199d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
3299d3dd28SThomas Lively  ret <16 x i8> %v2
3399d3dd28SThomas Lively}
3499d3dd28SThomas Lively
35e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_with_folded_offset(<16 x i8>* %p) {
3651cd326fSThomas Lively; CHECK-LABEL: load_v16i8_with_folded_offset:
3751cd326fSThomas Lively; CHECK:         .functype load_v16i8_with_folded_offset (i32) -> (v128)
3851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
3951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
4051cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
4151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
42e1f67a8bSThomas Lively  %q = ptrtoint <16 x i8>* %p to i32
43e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
44e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <16 x i8>*
45e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
46e1f67a8bSThomas Lively  ret <16 x i8> %v
47e1f67a8bSThomas Lively}
48e1f67a8bSThomas Lively
4999d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_with_folded_offset(i8* %p) {
5051cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_with_folded_offset:
5151cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_with_folded_offset (i32) -> (v128)
5251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
5351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
54a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 16
5551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
5699d3dd28SThomas Lively  %q = ptrtoint i8* %p to i32
5799d3dd28SThomas Lively  %r = add nuw i32 %q, 16
5899d3dd28SThomas Lively  %s = inttoptr i32 %r to i8*
5999d3dd28SThomas Lively  %e = load i8, i8* %s
6099d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
6199d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
6299d3dd28SThomas Lively  ret <16 x i8> %v2
6399d3dd28SThomas Lively}
6499d3dd28SThomas Lively
65e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_with_folded_gep_offset(<16 x i8>* %p) {
6651cd326fSThomas Lively; CHECK-LABEL: load_v16i8_with_folded_gep_offset:
6751cd326fSThomas Lively; CHECK:         .functype load_v16i8_with_folded_gep_offset (i32) -> (v128)
6851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
6951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
7051cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
7151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
72e1f67a8bSThomas Lively  %s = getelementptr inbounds <16 x i8>, <16 x i8>* %p, i32 1
73e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
74e1f67a8bSThomas Lively  ret <16 x i8> %v
75e1f67a8bSThomas Lively}
76e1f67a8bSThomas Lively
7799d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_with_folded_gep_offset(i8* %p) {
7851cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_with_folded_gep_offset:
7951cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_with_folded_gep_offset (i32) -> (v128)
8051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
8151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
82a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 1
8351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
8499d3dd28SThomas Lively  %s = getelementptr inbounds i8, i8* %p, i32 1
8599d3dd28SThomas Lively  %e = load i8, i8* %s
8699d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
8799d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
8899d3dd28SThomas Lively  ret <16 x i8> %v2
8999d3dd28SThomas Lively}
9099d3dd28SThomas Lively
91e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_with_unfolded_gep_negative_offset(<16 x i8>* %p) {
9251cd326fSThomas Lively; CHECK-LABEL: load_v16i8_with_unfolded_gep_negative_offset:
9351cd326fSThomas Lively; CHECK:         .functype load_v16i8_with_unfolded_gep_negative_offset (i32) -> (v128)
9451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
9551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
9651cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
9751cd326fSThomas Lively; CHECK-NEXT:    i32.add
9851cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
9951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
100e1f67a8bSThomas Lively  %s = getelementptr inbounds <16 x i8>, <16 x i8>* %p, i32 -1
101e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
102e1f67a8bSThomas Lively  ret <16 x i8> %v
103e1f67a8bSThomas Lively}
104e1f67a8bSThomas Lively
10599d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_with_unfolded_gep_negative_offset(i8* %p) {
10651cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_with_unfolded_gep_negative_offset:
10751cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_with_unfolded_gep_negative_offset (i32) -> (v128)
10851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
10951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
11051cd326fSThomas Lively; CHECK-NEXT:    i32.const -1
11151cd326fSThomas Lively; CHECK-NEXT:    i32.add
112a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 0
11351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
11499d3dd28SThomas Lively  %s = getelementptr inbounds i8, i8* %p, i32 -1
11599d3dd28SThomas Lively  %e = load i8, i8* %s
11699d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
11799d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
11899d3dd28SThomas Lively  ret <16 x i8> %v2
11999d3dd28SThomas Lively}
12099d3dd28SThomas Lively
121e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_with_unfolded_offset(<16 x i8>* %p) {
12251cd326fSThomas Lively; CHECK-LABEL: load_v16i8_with_unfolded_offset:
12351cd326fSThomas Lively; CHECK:         .functype load_v16i8_with_unfolded_offset (i32) -> (v128)
12451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
12551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
12651cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
12751cd326fSThomas Lively; CHECK-NEXT:    i32.add
12851cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
12951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
130e1f67a8bSThomas Lively  %q = ptrtoint <16 x i8>* %p to i32
131e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
132e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <16 x i8>*
133e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
134e1f67a8bSThomas Lively  ret <16 x i8> %v
135e1f67a8bSThomas Lively}
136e1f67a8bSThomas Lively
13799d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_with_unfolded_offset(i8* %p) {
13851cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_with_unfolded_offset:
13951cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_with_unfolded_offset (i32) -> (v128)
14051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
14151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
14251cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
14351cd326fSThomas Lively; CHECK-NEXT:    i32.add
144a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 0
14551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
14699d3dd28SThomas Lively  %q = ptrtoint i8* %p to i32
14799d3dd28SThomas Lively  %r = add nsw i32 %q, 16
14899d3dd28SThomas Lively  %s = inttoptr i32 %r to i8*
14999d3dd28SThomas Lively  %e = load i8, i8* %s
15099d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
15199d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
15299d3dd28SThomas Lively  ret <16 x i8> %v2
15399d3dd28SThomas Lively}
15499d3dd28SThomas Lively
155e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_with_unfolded_gep_offset(<16 x i8>* %p) {
15651cd326fSThomas Lively; CHECK-LABEL: load_v16i8_with_unfolded_gep_offset:
15751cd326fSThomas Lively; CHECK:         .functype load_v16i8_with_unfolded_gep_offset (i32) -> (v128)
15851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
15951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
16051cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
16151cd326fSThomas Lively; CHECK-NEXT:    i32.add
16251cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
16351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
164e1f67a8bSThomas Lively  %s = getelementptr <16 x i8>, <16 x i8>* %p, i32 1
165e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
166e1f67a8bSThomas Lively  ret <16 x i8> %v
167e1f67a8bSThomas Lively}
168e1f67a8bSThomas Lively
16999d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_with_unfolded_gep_offset(i8* %p) {
17051cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_with_unfolded_gep_offset:
17151cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_with_unfolded_gep_offset (i32) -> (v128)
17251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
17351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
17451cd326fSThomas Lively; CHECK-NEXT:    i32.const 1
17551cd326fSThomas Lively; CHECK-NEXT:    i32.add
176a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 0
17751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
17899d3dd28SThomas Lively  %s = getelementptr i8, i8* %p, i32 1
17999d3dd28SThomas Lively  %e = load i8, i8* %s
18099d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
18199d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
18299d3dd28SThomas Lively  ret <16 x i8> %v2
18399d3dd28SThomas Lively}
18499d3dd28SThomas Lively
185e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_from_numeric_address() {
18651cd326fSThomas Lively; CHECK-LABEL: load_v16i8_from_numeric_address:
18751cd326fSThomas Lively; CHECK:         .functype load_v16i8_from_numeric_address () -> (v128)
18851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
18951cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
19051cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
19151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
192e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <16 x i8>*
193e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* %s
194e1f67a8bSThomas Lively  ret <16 x i8> %v
195e1f67a8bSThomas Lively}
196e1f67a8bSThomas Lively
19799d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_from_numeric_address() {
19851cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_from_numeric_address:
19951cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_from_numeric_address () -> (v128)
20051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
20151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
202a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat 32
20351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
20499d3dd28SThomas Lively  %s = inttoptr i32 32 to i8*
20599d3dd28SThomas Lively  %e = load i8, i8* %s
20699d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
20799d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
20899d3dd28SThomas Lively  ret <16 x i8> %v2
20999d3dd28SThomas Lively}
21099d3dd28SThomas Lively
211e1f67a8bSThomas Lively@gv_v16i8 = global <16 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>
212e1f67a8bSThomas Livelydefine <16 x i8> @load_v16i8_from_global_address() {
21351cd326fSThomas Lively; CHECK-LABEL: load_v16i8_from_global_address:
21451cd326fSThomas Lively; CHECK:         .functype load_v16i8_from_global_address () -> (v128)
21551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
21651cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
21751cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v16i8
21851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
219e1f67a8bSThomas Lively  %v = load <16 x i8>, <16 x i8>* @gv_v16i8
220e1f67a8bSThomas Lively  ret <16 x i8> %v
221e1f67a8bSThomas Lively}
222e1f67a8bSThomas Lively
22399d3dd28SThomas Lively@gv_i8 = global i8 42
22499d3dd28SThomas Livelydefine <16 x i8> @load_splat_v16i8_from_global_address() {
22551cd326fSThomas Lively; CHECK-LABEL: load_splat_v16i8_from_global_address:
22651cd326fSThomas Lively; CHECK:         .functype load_splat_v16i8_from_global_address () -> (v128)
22751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
22851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
229a781a706SThomas Lively; CHECK-NEXT:    v128.load8_splat gv_i8
23051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
23199d3dd28SThomas Lively  %e = load i8, i8* @gv_i8
23299d3dd28SThomas Lively  %v1 = insertelement <16 x i8> undef, i8 %e, i32 0
23399d3dd28SThomas Lively  %v2 = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> zeroinitializer
23499d3dd28SThomas Lively  ret <16 x i8> %v2
23599d3dd28SThomas Lively}
23699d3dd28SThomas Lively
237e1f67a8bSThomas Livelydefine void @store_v16i8(<16 x i8> %v, <16 x i8>* %p) {
23851cd326fSThomas Lively; CHECK-LABEL: store_v16i8:
23951cd326fSThomas Lively; CHECK:         .functype store_v16i8 (v128, i32) -> ()
24051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
24151cd326fSThomas Lively; CHECK-NEXT:    local.get 1
24251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
24351cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
24451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
245e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %p
246e1f67a8bSThomas Lively  ret void
247e1f67a8bSThomas Lively}
248e1f67a8bSThomas Lively
249e1f67a8bSThomas Livelydefine void @store_v16i8_with_folded_offset(<16 x i8> %v, <16 x i8>* %p) {
25051cd326fSThomas Lively; CHECK-LABEL: store_v16i8_with_folded_offset:
25151cd326fSThomas Lively; CHECK:         .functype store_v16i8_with_folded_offset (v128, i32) -> ()
25251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
25351cd326fSThomas Lively; CHECK-NEXT:    local.get 1
25451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
25551cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
25651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
257e1f67a8bSThomas Lively  %q = ptrtoint <16 x i8>* %p to i32
258e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
259e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <16 x i8>*
260e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
261e1f67a8bSThomas Lively  ret void
262e1f67a8bSThomas Lively}
263e1f67a8bSThomas Lively
264e1f67a8bSThomas Livelydefine void @store_v16i8_with_folded_gep_offset(<16 x i8> %v, <16 x i8>* %p) {
26551cd326fSThomas Lively; CHECK-LABEL: store_v16i8_with_folded_gep_offset:
26651cd326fSThomas Lively; CHECK:         .functype store_v16i8_with_folded_gep_offset (v128, i32) -> ()
26751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
26851cd326fSThomas Lively; CHECK-NEXT:    local.get 1
26951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
27051cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
27151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
272e1f67a8bSThomas Lively  %s = getelementptr inbounds <16 x i8>, <16 x i8>* %p, i32 1
273e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
274e1f67a8bSThomas Lively  ret void
275e1f67a8bSThomas Lively}
276e1f67a8bSThomas Lively
277e1f67a8bSThomas Livelydefine void @store_v16i8_with_unfolded_gep_negative_offset(<16 x i8> %v, <16 x i8>* %p) {
27851cd326fSThomas Lively; CHECK-LABEL: store_v16i8_with_unfolded_gep_negative_offset:
27951cd326fSThomas Lively; CHECK:         .functype store_v16i8_with_unfolded_gep_negative_offset (v128, i32) -> ()
28051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
28151cd326fSThomas Lively; CHECK-NEXT:    local.get 1
28251cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
28351cd326fSThomas Lively; CHECK-NEXT:    i32.add
28451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
28551cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
28651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
287e1f67a8bSThomas Lively  %s = getelementptr inbounds <16 x i8>, <16 x i8>* %p, i32 -1
288e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
289e1f67a8bSThomas Lively  ret void
290e1f67a8bSThomas Lively}
291e1f67a8bSThomas Lively
292e1f67a8bSThomas Livelydefine void @store_v16i8_with_unfolded_offset(<16 x i8> %v, <16 x i8>* %p) {
29351cd326fSThomas Lively; CHECK-LABEL: store_v16i8_with_unfolded_offset:
29451cd326fSThomas Lively; CHECK:         .functype store_v16i8_with_unfolded_offset (v128, i32) -> ()
29551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
29651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
297a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
29851cd326fSThomas Lively; CHECK-NEXT:    i32.add
29951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
30051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
30151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
302a4594592SThomas Lively  %q = ptrtoint <16 x i8>* %p to i32
303a4594592SThomas Lively  %r = add nsw i32 %q, 16
304a4594592SThomas Lively  %s = inttoptr i32 %r to <16 x i8>*
305e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
306e1f67a8bSThomas Lively  ret void
307e1f67a8bSThomas Lively}
308e1f67a8bSThomas Lively
309e1f67a8bSThomas Livelydefine void @store_v16i8_with_unfolded_gep_offset(<16 x i8> %v, <16 x i8>* %p) {
31051cd326fSThomas Lively; CHECK-LABEL: store_v16i8_with_unfolded_gep_offset:
31151cd326fSThomas Lively; CHECK:         .functype store_v16i8_with_unfolded_gep_offset (v128, i32) -> ()
31251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
31351cd326fSThomas Lively; CHECK-NEXT:    local.get 1
31451cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
31551cd326fSThomas Lively; CHECK-NEXT:    i32.add
31651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
31751cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
31851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
319e1f67a8bSThomas Lively  %s = getelementptr <16 x i8>, <16 x i8>* %p, i32 1
320e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
321e1f67a8bSThomas Lively  ret void
322e1f67a8bSThomas Lively}
323e1f67a8bSThomas Lively
324e1f67a8bSThomas Livelydefine void @store_v16i8_to_numeric_address(<16 x i8> %v) {
32551cd326fSThomas Lively; CHECK-LABEL: store_v16i8_to_numeric_address:
32651cd326fSThomas Lively; CHECK:         .functype store_v16i8_to_numeric_address (v128) -> ()
32751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
32851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
32951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
33051cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
33151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
332e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <16 x i8>*
333e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* %s
334e1f67a8bSThomas Lively  ret void
335e1f67a8bSThomas Lively}
336e1f67a8bSThomas Lively
337e1f67a8bSThomas Livelydefine void @store_v16i8_to_global_address(<16 x i8> %v) {
33851cd326fSThomas Lively; CHECK-LABEL: store_v16i8_to_global_address:
33951cd326fSThomas Lively; CHECK:         .functype store_v16i8_to_global_address (v128) -> ()
34051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
34151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
34251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
34351cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v16i8
34451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
345e1f67a8bSThomas Lively  store <16 x i8> %v , <16 x i8>* @gv_v16i8
346e1f67a8bSThomas Lively  ret void
347e1f67a8bSThomas Lively}
348e1f67a8bSThomas Lively
349e1f67a8bSThomas Lively; ==============================================================================
350e1f67a8bSThomas Lively; 8 x i16
351e1f67a8bSThomas Lively; ==============================================================================
352e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16(<8 x i16>* %p) {
35351cd326fSThomas Lively; CHECK-LABEL: load_v8i16:
35451cd326fSThomas Lively; CHECK:         .functype load_v8i16 (i32) -> (v128)
35551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
35651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
35751cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
35851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
359e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %p
360e1f67a8bSThomas Lively  ret <8 x i16> %v
361e1f67a8bSThomas Lively}
362e1f67a8bSThomas Lively
36399d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16(i16* %p) {
36451cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16:
36551cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16 (i32) -> (v128)
36651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
36751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
368a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 0
36951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
37099d3dd28SThomas Lively  %e = load i16, i16* %p
37199d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
37299d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
37399d3dd28SThomas Lively  ret <8 x i16> %v2
37499d3dd28SThomas Lively}
37599d3dd28SThomas Lively
37681125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16(<8 x i8>* %p) {
37751cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16:
37851cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16 (i32) -> (v128)
37951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
38051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
38151cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 0
38251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
38381125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %p
38481125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
38581125f73SThomas Lively  ret <8 x i16> %v2
38681125f73SThomas Lively}
38781125f73SThomas Lively
38881125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16(<8 x i8>* %p) {
38951cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16:
39051cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16 (i32) -> (v128)
39151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
39251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
39351cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 0
39451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
39581125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %p
39681125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
39781125f73SThomas Lively  ret <8 x i16> %v2
39881125f73SThomas Lively}
39981125f73SThomas Lively
40081125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16(<8 x i8>* %p) {
40151cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16:
40251cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16 (i32) -> (v128)
40351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
40451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
405b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
40651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
40781125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %p
40881125f73SThomas Lively  ret <8 x i8> %v
40981125f73SThomas Lively}
41081125f73SThomas Lively
411e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_with_folded_offset(<8 x i16>* %p) {
41251cd326fSThomas Lively; CHECK-LABEL: load_v8i16_with_folded_offset:
41351cd326fSThomas Lively; CHECK:         .functype load_v8i16_with_folded_offset (i32) -> (v128)
41451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
41551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
41651cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
41751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
418e1f67a8bSThomas Lively  %q = ptrtoint <8 x i16>* %p to i32
419e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
420e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <8 x i16>*
421e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
422e1f67a8bSThomas Lively  ret <8 x i16> %v
423e1f67a8bSThomas Lively}
424e1f67a8bSThomas Lively
42599d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_with_folded_offset(i16* %p) {
42651cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_with_folded_offset:
42751cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_with_folded_offset (i32) -> (v128)
42851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
42951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
430a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 16
43151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
43299d3dd28SThomas Lively  %q = ptrtoint i16* %p to i32
43399d3dd28SThomas Lively  %r = add nuw i32 %q, 16
43499d3dd28SThomas Lively  %s = inttoptr i32 %r to i16*
43599d3dd28SThomas Lively  %e = load i16, i16* %s
43699d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
43799d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
43899d3dd28SThomas Lively  ret <8 x i16> %v2
43999d3dd28SThomas Lively}
44099d3dd28SThomas Lively
44181125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_with_folded_offset(<8 x i8>* %p) {
44251cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_with_folded_offset:
44351cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_with_folded_offset (i32) -> (v128)
44451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
44551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
44651cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 16
44751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
44881125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
44981125f73SThomas Lively  %r = add nuw i32 %q, 16
45081125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
45181125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
45281125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
45381125f73SThomas Lively  ret <8 x i16> %v2
45481125f73SThomas Lively}
45581125f73SThomas Lively
45681125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_with_folded_offset(<8 x i8>* %p) {
45751cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_with_folded_offset:
45851cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_with_folded_offset (i32) -> (v128)
45951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
46051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
46151cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 16
46251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
46381125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
46481125f73SThomas Lively  %r = add nuw i32 %q, 16
46581125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
46681125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
46781125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
46881125f73SThomas Lively  ret <8 x i16> %v2
46981125f73SThomas Lively}
47081125f73SThomas Lively
47181125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_with_folded_offset(<8 x i8>* %p) {
47251cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_with_folded_offset:
47351cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_with_folded_offset (i32) -> (v128)
47451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
47551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
476b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 16
47751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
47881125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
47981125f73SThomas Lively  %r = add nuw i32 %q, 16
48081125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
48181125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
48281125f73SThomas Lively  ret <8 x i8> %v
48381125f73SThomas Lively}
48481125f73SThomas Lively
485e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_with_folded_gep_offset(<8 x i16>* %p) {
48651cd326fSThomas Lively; CHECK-LABEL: load_v8i16_with_folded_gep_offset:
48751cd326fSThomas Lively; CHECK:         .functype load_v8i16_with_folded_gep_offset (i32) -> (v128)
48851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
48951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
49051cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
49151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
492e1f67a8bSThomas Lively  %s = getelementptr inbounds <8 x i16>, <8 x i16>* %p, i32 1
493e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
494e1f67a8bSThomas Lively  ret <8 x i16> %v
495e1f67a8bSThomas Lively}
496e1f67a8bSThomas Lively
49799d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_with_folded_gep_offset(i16* %p) {
49851cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_with_folded_gep_offset:
49951cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_with_folded_gep_offset (i32) -> (v128)
50051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
50151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
502a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 2
50351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
50499d3dd28SThomas Lively  %s = getelementptr inbounds i16, i16* %p, i32 1
50599d3dd28SThomas Lively  %e = load i16, i16* %s
50699d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
50799d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
50899d3dd28SThomas Lively  ret <8 x i16> %v2
50999d3dd28SThomas Lively}
51099d3dd28SThomas Lively
51181125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_with_folded_gep_offset(<8 x i8>* %p) {
51251cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_with_folded_gep_offset:
51351cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_with_folded_gep_offset (i32) -> (v128)
51451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
51551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
51651cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 8
51751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
51881125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 1
51981125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
52081125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
52181125f73SThomas Lively  ret <8 x i16> %v2
52281125f73SThomas Lively}
52381125f73SThomas Lively
52481125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_with_folded_gep_offset(<8 x i8>* %p) {
52551cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_with_folded_gep_offset:
52651cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_with_folded_gep_offset (i32) -> (v128)
52751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
52851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
52951cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 8
53051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
53181125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 1
53281125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
53381125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
53481125f73SThomas Lively  ret <8 x i16> %v2
53581125f73SThomas Lively}
53681125f73SThomas Lively
53781125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_with_folded_gep_offset(<8 x i8>* %p) {
53851cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_with_folded_gep_offset:
53951cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_with_folded_gep_offset (i32) -> (v128)
54051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
54151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
542b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 8
54351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
54481125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 1
54581125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
54681125f73SThomas Lively  ret <8 x i8> %v
54781125f73SThomas Lively}
54881125f73SThomas Lively
549e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_with_unfolded_gep_negative_offset(<8 x i16>* %p) {
55051cd326fSThomas Lively; CHECK-LABEL: load_v8i16_with_unfolded_gep_negative_offset:
55151cd326fSThomas Lively; CHECK:         .functype load_v8i16_with_unfolded_gep_negative_offset (i32) -> (v128)
55251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
55351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
55451cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
55551cd326fSThomas Lively; CHECK-NEXT:    i32.add
55651cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
55751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
558e1f67a8bSThomas Lively  %s = getelementptr inbounds <8 x i16>, <8 x i16>* %p, i32 -1
559e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
560e1f67a8bSThomas Lively  ret <8 x i16> %v
561e1f67a8bSThomas Lively}
562e1f67a8bSThomas Lively
56399d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_with_unfolded_gep_negative_offset(i16* %p) {
56451cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_with_unfolded_gep_negative_offset:
56551cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_with_unfolded_gep_negative_offset (i32) -> (v128)
56651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
56751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
56851cd326fSThomas Lively; CHECK-NEXT:    i32.const -2
56951cd326fSThomas Lively; CHECK-NEXT:    i32.add
570a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 0
57151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
57299d3dd28SThomas Lively  %s = getelementptr inbounds i16, i16* %p, i32 -1
57399d3dd28SThomas Lively  %e = load i16, i16* %s
57499d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
57599d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
57699d3dd28SThomas Lively  ret <8 x i16> %v2
57799d3dd28SThomas Lively}
57899d3dd28SThomas Lively
57981125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_with_unfolded_gep_negative_offset(<8 x i8>* %p) {
58051cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_with_unfolded_gep_negative_offset:
58151cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_with_unfolded_gep_negative_offset (i32) -> (v128)
58251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
58351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
58451cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
58551cd326fSThomas Lively; CHECK-NEXT:    i32.add
58651cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 0
58751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
58881125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 -1
58981125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
59081125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
59181125f73SThomas Lively  ret <8 x i16> %v2
59281125f73SThomas Lively}
59381125f73SThomas Lively
59481125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_with_unfolded_gep_negative_offset(<8 x i8>* %p) {
59551cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_with_unfolded_gep_negative_offset:
59651cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_with_unfolded_gep_negative_offset (i32) -> (v128)
59751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
59851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
59951cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
60051cd326fSThomas Lively; CHECK-NEXT:    i32.add
60151cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 0
60251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
60381125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 -1
60481125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
60581125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
60681125f73SThomas Lively  ret <8 x i16> %v2
60781125f73SThomas Lively}
60881125f73SThomas Lively
60981125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_with_unfolded_gep_negative_offset(<8 x i8>* %p) {
61051cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_with_unfolded_gep_negative_offset:
61151cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_with_unfolded_gep_negative_offset (i32) -> (v128)
61251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
61351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
61451cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
61551cd326fSThomas Lively; CHECK-NEXT:    i32.add
616b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
61751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
61881125f73SThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 -1
61981125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
62081125f73SThomas Lively  ret <8 x i8> %v
62181125f73SThomas Lively}
62281125f73SThomas Lively
623e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_with_unfolded_offset(<8 x i16>* %p) {
62451cd326fSThomas Lively; CHECK-LABEL: load_v8i16_with_unfolded_offset:
62551cd326fSThomas Lively; CHECK:         .functype load_v8i16_with_unfolded_offset (i32) -> (v128)
62651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
62751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
62851cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
62951cd326fSThomas Lively; CHECK-NEXT:    i32.add
63051cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
63151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
632e1f67a8bSThomas Lively  %q = ptrtoint <8 x i16>* %p to i32
633e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
634e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <8 x i16>*
635e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
636e1f67a8bSThomas Lively  ret <8 x i16> %v
637e1f67a8bSThomas Lively}
638e1f67a8bSThomas Lively
63999d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_with_unfolded_offset(i16* %p) {
64051cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_with_unfolded_offset:
64151cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_with_unfolded_offset (i32) -> (v128)
64251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
64351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
64451cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
64551cd326fSThomas Lively; CHECK-NEXT:    i32.add
646a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 0
64751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
64899d3dd28SThomas Lively  %q = ptrtoint i16* %p to i32
64999d3dd28SThomas Lively  %r = add nsw i32 %q, 16
65099d3dd28SThomas Lively  %s = inttoptr i32 %r to i16*
65199d3dd28SThomas Lively  %e = load i16, i16* %s
65299d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
65399d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
65499d3dd28SThomas Lively  ret <8 x i16> %v2
65599d3dd28SThomas Lively}
65699d3dd28SThomas Lively
65781125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_with_unfolded_offset(<8 x i8>* %p) {
65851cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_with_unfolded_offset:
65951cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_with_unfolded_offset (i32) -> (v128)
66051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
66151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
66251cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
66351cd326fSThomas Lively; CHECK-NEXT:    i32.add
66451cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 0
66551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
66681125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
66781125f73SThomas Lively  %r = add nsw i32 %q, 16
66881125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
66981125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
67081125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
67181125f73SThomas Lively  ret <8 x i16> %v2
67281125f73SThomas Lively}
67381125f73SThomas Lively
67481125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_with_unfolded_offset(<8 x i8>* %p) {
67551cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_with_unfolded_offset:
67651cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_with_unfolded_offset (i32) -> (v128)
67751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
67851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
67951cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
68051cd326fSThomas Lively; CHECK-NEXT:    i32.add
68151cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 0
68251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
68381125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
68481125f73SThomas Lively  %r = add nsw i32 %q, 16
68581125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
68681125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
68781125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
68881125f73SThomas Lively  ret <8 x i16> %v2
68981125f73SThomas Lively}
69081125f73SThomas Lively
69181125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_with_unfolded_offset(<8 x i8>* %p) {
69251cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_with_unfolded_offset:
69351cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_with_unfolded_offset (i32) -> (v128)
69451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
69551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
69651cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
69751cd326fSThomas Lively; CHECK-NEXT:    i32.add
698b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
69951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
70081125f73SThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
70181125f73SThomas Lively  %r = add nsw i32 %q, 16
70281125f73SThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
70381125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
70481125f73SThomas Lively  ret <8 x i8> %v
70581125f73SThomas Lively}
70681125f73SThomas Lively
707e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_with_unfolded_gep_offset(<8 x i16>* %p) {
70851cd326fSThomas Lively; CHECK-LABEL: load_v8i16_with_unfolded_gep_offset:
70951cd326fSThomas Lively; CHECK:         .functype load_v8i16_with_unfolded_gep_offset (i32) -> (v128)
71051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
71151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
71251cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
71351cd326fSThomas Lively; CHECK-NEXT:    i32.add
71451cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
71551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
716e1f67a8bSThomas Lively  %s = getelementptr <8 x i16>, <8 x i16>* %p, i32 1
717e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
718e1f67a8bSThomas Lively  ret <8 x i16> %v
719e1f67a8bSThomas Lively}
720e1f67a8bSThomas Lively
72199d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_with_unfolded_gep_offset(i16* %p) {
72251cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_with_unfolded_gep_offset:
72351cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_with_unfolded_gep_offset (i32) -> (v128)
72451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
72551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
72651cd326fSThomas Lively; CHECK-NEXT:    i32.const 2
72751cd326fSThomas Lively; CHECK-NEXT:    i32.add
728a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 0
72951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
73099d3dd28SThomas Lively  %s = getelementptr i16, i16* %p, i32 1
73199d3dd28SThomas Lively  %e = load i16, i16* %s
73299d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
73399d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
73499d3dd28SThomas Lively  ret <8 x i16> %v2
73599d3dd28SThomas Lively}
73699d3dd28SThomas Lively
73781125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_with_unfolded_gep_offset(<8 x i8>* %p) {
73851cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_with_unfolded_gep_offset:
73951cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_with_unfolded_gep_offset (i32) -> (v128)
74051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
74151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
74251cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
74351cd326fSThomas Lively; CHECK-NEXT:    i32.add
74451cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 0
74551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
74681125f73SThomas Lively  %s = getelementptr <8 x i8>, <8 x i8>* %p, i32 1
74781125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
74881125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
74981125f73SThomas Lively  ret <8 x i16> %v2
75081125f73SThomas Lively}
75181125f73SThomas Lively
75281125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_with_unfolded_gep_offset(<8 x i8>* %p) {
75351cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_with_unfolded_gep_offset:
75451cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_with_unfolded_gep_offset (i32) -> (v128)
75551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
75651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
75751cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
75851cd326fSThomas Lively; CHECK-NEXT:    i32.add
75951cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 0
76051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
76181125f73SThomas Lively  %s = getelementptr <8 x i8>, <8 x i8>* %p, i32 1
76281125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
76381125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
76481125f73SThomas Lively  ret <8 x i16> %v2
76581125f73SThomas Lively}
76681125f73SThomas Lively
76781125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_with_unfolded_gep_offset(<8 x i8>* %p) {
76851cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_with_unfolded_gep_offset:
76951cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_with_unfolded_gep_offset (i32) -> (v128)
77051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
77151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
77251cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
77351cd326fSThomas Lively; CHECK-NEXT:    i32.add
774b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
77551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
77681125f73SThomas Lively  %s = getelementptr <8 x i8>, <8 x i8>* %p, i32 1
77781125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
77881125f73SThomas Lively  ret <8 x i8> %v
77981125f73SThomas Lively}
78081125f73SThomas Lively
781e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_from_numeric_address() {
78251cd326fSThomas Lively; CHECK-LABEL: load_v8i16_from_numeric_address:
78351cd326fSThomas Lively; CHECK:         .functype load_v8i16_from_numeric_address () -> (v128)
78451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
78551cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
78651cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
78751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
788e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <8 x i16>*
789e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* %s
790e1f67a8bSThomas Lively  ret <8 x i16> %v
791e1f67a8bSThomas Lively}
792e1f67a8bSThomas Lively
79399d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_from_numeric_address() {
79451cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_from_numeric_address:
79551cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_from_numeric_address () -> (v128)
79651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
79751cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
798a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat 32
79951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
80099d3dd28SThomas Lively  %s = inttoptr i32 32 to i16*
80199d3dd28SThomas Lively  %e = load i16, i16* %s
80299d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
80399d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
80499d3dd28SThomas Lively  ret <8 x i16> %v2
80599d3dd28SThomas Lively}
80699d3dd28SThomas Lively
80781125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_from_numeric_address() {
80851cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_from_numeric_address:
80951cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_from_numeric_address () -> (v128)
81051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
81151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
81251cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s 32
81351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
81481125f73SThomas Lively  %s = inttoptr i32 32 to <8 x i8>*
81581125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
81681125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
81781125f73SThomas Lively  ret <8 x i16> %v2
81881125f73SThomas Lively}
81981125f73SThomas Lively
82081125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_from_numeric_address() {
82151cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_from_numeric_address:
82251cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_from_numeric_address () -> (v128)
82351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
82451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
82551cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u 32
82651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
82781125f73SThomas Lively  %s = inttoptr i32 32 to <8 x i8>*
82881125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
82981125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
83081125f73SThomas Lively  ret <8 x i16> %v2
83181125f73SThomas Lively}
83281125f73SThomas Lively
83381125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_from_numeric_address() {
83451cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_from_numeric_address:
83551cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_from_numeric_address () -> (v128)
83651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
83751cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
838b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 32
83951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
84081125f73SThomas Lively  %s = inttoptr i32 32 to <8 x i8>*
84181125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* %s
84281125f73SThomas Lively  ret <8 x i8> %v
84381125f73SThomas Lively}
84481125f73SThomas Lively
845e1f67a8bSThomas Lively@gv_v8i16 = global <8 x i16> <i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42>
846e1f67a8bSThomas Livelydefine <8 x i16> @load_v8i16_from_global_address() {
84751cd326fSThomas Lively; CHECK-LABEL: load_v8i16_from_global_address:
84851cd326fSThomas Lively; CHECK:         .functype load_v8i16_from_global_address () -> (v128)
84951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
85051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
85151cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v8i16
85251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
853e1f67a8bSThomas Lively  %v = load <8 x i16>, <8 x i16>* @gv_v8i16
854e1f67a8bSThomas Lively  ret <8 x i16> %v
855e1f67a8bSThomas Lively}
856e1f67a8bSThomas Lively
85799d3dd28SThomas Lively@gv_i16 = global i16 42
85899d3dd28SThomas Livelydefine <8 x i16> @load_splat_v8i16_from_global_address() {
85951cd326fSThomas Lively; CHECK-LABEL: load_splat_v8i16_from_global_address:
86051cd326fSThomas Lively; CHECK:         .functype load_splat_v8i16_from_global_address () -> (v128)
86151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
86251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
863a781a706SThomas Lively; CHECK-NEXT:    v128.load16_splat gv_i16
86451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
86599d3dd28SThomas Lively  %e = load i16, i16* @gv_i16
86699d3dd28SThomas Lively  %v1 = insertelement <8 x i16> undef, i16 %e, i32 0
86799d3dd28SThomas Lively  %v2 = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> zeroinitializer
86899d3dd28SThomas Lively  ret <8 x i16> %v2
86999d3dd28SThomas Lively}
87099d3dd28SThomas Lively
87181125f73SThomas Lively@gv_v8i8 = global <8 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>
87281125f73SThomas Livelydefine <8 x i16> @load_sext_v8i16_from_global_address() {
87351cd326fSThomas Lively; CHECK-LABEL: load_sext_v8i16_from_global_address:
87451cd326fSThomas Lively; CHECK:         .functype load_sext_v8i16_from_global_address () -> (v128)
87551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
87651cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
87751cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_s gv_v8i8
87851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
87981125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* @gv_v8i8
88081125f73SThomas Lively  %v2 = sext <8 x i8> %v to <8 x i16>
88181125f73SThomas Lively  ret <8 x i16> %v2
88281125f73SThomas Lively}
88381125f73SThomas Lively
88481125f73SThomas Livelydefine <8 x i16> @load_zext_v8i16_from_global_address() {
88551cd326fSThomas Lively; CHECK-LABEL: load_zext_v8i16_from_global_address:
88651cd326fSThomas Lively; CHECK:         .functype load_zext_v8i16_from_global_address () -> (v128)
88751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
88851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
88951cd326fSThomas Lively; CHECK-NEXT:    i16x8.load8x8_u gv_v8i8
89051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
89181125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* @gv_v8i8
89281125f73SThomas Lively  %v2 = zext <8 x i8> %v to <8 x i16>
89381125f73SThomas Lively  ret <8 x i16> %v2
89481125f73SThomas Lively}
89581125f73SThomas Lively
89681125f73SThomas Livelydefine <8 x i8> @load_ext_v8i16_from_global_address() {
89751cd326fSThomas Lively; CHECK-LABEL: load_ext_v8i16_from_global_address:
89851cd326fSThomas Lively; CHECK:         .functype load_ext_v8i16_from_global_address () -> (v128)
89951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
90051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
901b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero gv_v8i8
90251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
90381125f73SThomas Lively  %v = load <8 x i8>, <8 x i8>* @gv_v8i8
90481125f73SThomas Lively  ret <8 x i8> %v
90581125f73SThomas Lively}
90681125f73SThomas Lively
90781125f73SThomas Lively
908e1f67a8bSThomas Livelydefine void @store_v8i16(<8 x i16> %v, <8 x i16>* %p) {
90951cd326fSThomas Lively; CHECK-LABEL: store_v8i16:
91051cd326fSThomas Lively; CHECK:         .functype store_v8i16 (v128, i32) -> ()
91151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
91251cd326fSThomas Lively; CHECK-NEXT:    local.get 1
91351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
91451cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
91551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
916e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %p
917e1f67a8bSThomas Lively  ret void
918e1f67a8bSThomas Lively}
919e1f67a8bSThomas Lively
920ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16(<8 x i8> %v, <8 x i8>* %p) {
921ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16:
922ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16 (v128, i32) -> ()
923ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
924ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
925ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
926b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
927ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
928ffd8c23cSThomas Lively  store <8 x i8> %v, <8 x i8>* %p
929ffd8c23cSThomas Lively  ret void
930ffd8c23cSThomas Lively}
931ffd8c23cSThomas Lively
932e1f67a8bSThomas Livelydefine void @store_v8i16_with_folded_offset(<8 x i16> %v, <8 x i16>* %p) {
93351cd326fSThomas Lively; CHECK-LABEL: store_v8i16_with_folded_offset:
93451cd326fSThomas Lively; CHECK:         .functype store_v8i16_with_folded_offset (v128, i32) -> ()
93551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
93651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
93751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
93851cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
93951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
940e1f67a8bSThomas Lively  %q = ptrtoint <8 x i16>* %p to i32
941e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
942e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <8 x i16>*
943e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
944e1f67a8bSThomas Lively  ret void
945e1f67a8bSThomas Lively}
946e1f67a8bSThomas Lively
947ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_with_folded_offset(<8 x i8> %v, <8 x i8>* %p) {
948ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_with_folded_offset:
949ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_with_folded_offset (v128, i32) -> ()
950ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
951ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
952b69374caSThomas Lively; CHECK-NEXT:    i32.const 16
953b69374caSThomas Lively; CHECK-NEXT:    i32.add
954ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
955b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
956ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
957ffd8c23cSThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
958ffd8c23cSThomas Lively  %r = add nuw i32 %q, 16
959ffd8c23cSThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
960ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
961ffd8c23cSThomas Lively  ret void
962ffd8c23cSThomas Lively}
963ffd8c23cSThomas Lively
964e1f67a8bSThomas Livelydefine void @store_v8i16_with_folded_gep_offset(<8 x i16> %v, <8 x i16>* %p) {
96551cd326fSThomas Lively; CHECK-LABEL: store_v8i16_with_folded_gep_offset:
96651cd326fSThomas Lively; CHECK:         .functype store_v8i16_with_folded_gep_offset (v128, i32) -> ()
96751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
96851cd326fSThomas Lively; CHECK-NEXT:    local.get 1
96951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
97051cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
97151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
972e1f67a8bSThomas Lively  %s = getelementptr inbounds <8 x i16>, <8 x i16>* %p, i32 1
973e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
974e1f67a8bSThomas Lively  ret void
975e1f67a8bSThomas Lively}
976e1f67a8bSThomas Lively
977ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_with_folded_gep_offset(<8 x i8> %v, <8 x i8>* %p) {
978ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_with_folded_gep_offset:
979ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_with_folded_gep_offset (v128, i32) -> ()
980ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
981ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
982b69374caSThomas Lively; CHECK-NEXT:    i32.const 8
983b69374caSThomas Lively; CHECK-NEXT:    i32.add
984ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
985b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
986ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
987ffd8c23cSThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 1
988ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
989ffd8c23cSThomas Lively  ret void
990ffd8c23cSThomas Lively}
991ffd8c23cSThomas Lively
992e1f67a8bSThomas Livelydefine void @store_v8i16_with_unfolded_gep_negative_offset(<8 x i16> %v, <8 x i16>* %p) {
99351cd326fSThomas Lively; CHECK-LABEL: store_v8i16_with_unfolded_gep_negative_offset:
99451cd326fSThomas Lively; CHECK:         .functype store_v8i16_with_unfolded_gep_negative_offset (v128, i32) -> ()
99551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
99651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
99751cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
99851cd326fSThomas Lively; CHECK-NEXT:    i32.add
99951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
100051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
100151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1002e1f67a8bSThomas Lively  %s = getelementptr inbounds <8 x i16>, <8 x i16>* %p, i32 -1
1003e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
1004e1f67a8bSThomas Lively  ret void
1005e1f67a8bSThomas Lively}
1006e1f67a8bSThomas Lively
1007ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_with_unfolded_gep_negative_offset(<8 x i8> %v, <8 x i8>* %p) {
1008ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_with_unfolded_gep_negative_offset:
1009ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_with_unfolded_gep_negative_offset (v128, i32) -> ()
1010ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1011ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1012ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const -8
1013ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1014ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1015b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1016ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1017ffd8c23cSThomas Lively  %s = getelementptr inbounds <8 x i8>, <8 x i8>* %p, i32 -1
1018ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
1019ffd8c23cSThomas Lively  ret void
1020ffd8c23cSThomas Lively}
1021ffd8c23cSThomas Lively
1022e1f67a8bSThomas Livelydefine void @store_v8i16_with_unfolded_offset(<8 x i16> %v, <8 x i16>* %p) {
102351cd326fSThomas Lively; CHECK-LABEL: store_v8i16_with_unfolded_offset:
102451cd326fSThomas Lively; CHECK:         .functype store_v8i16_with_unfolded_offset (v128, i32) -> ()
102551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
102651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
1027a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
102851cd326fSThomas Lively; CHECK-NEXT:    i32.add
102951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
103051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
103151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1032a4594592SThomas Lively  %q = ptrtoint <8 x i16>* %p to i32
1033a4594592SThomas Lively  %r = add nsw i32 %q, 16
1034a4594592SThomas Lively  %s = inttoptr i32 %r to <8 x i16>*
1035e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
1036e1f67a8bSThomas Lively  ret void
1037e1f67a8bSThomas Lively}
1038e1f67a8bSThomas Lively
1039ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_with_unfolded_offset(<8 x i8> %v, <8 x i8>* %p) {
1040ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_with_unfolded_offset:
1041ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_with_unfolded_offset (v128, i32) -> ()
1042ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1043ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1044ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const 16
1045ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1046ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1047b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1048ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1049ffd8c23cSThomas Lively  %q = ptrtoint <8 x i8>* %p to i32
1050ffd8c23cSThomas Lively  %r = add nsw i32 %q, 16
1051ffd8c23cSThomas Lively  %s = inttoptr i32 %r to <8 x i8>*
1052ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
1053ffd8c23cSThomas Lively  ret void
1054ffd8c23cSThomas Lively}
1055ffd8c23cSThomas Lively
1056e1f67a8bSThomas Livelydefine void @store_v8i16_with_unfolded_gep_offset(<8 x i16> %v, <8 x i16>* %p) {
105751cd326fSThomas Lively; CHECK-LABEL: store_v8i16_with_unfolded_gep_offset:
105851cd326fSThomas Lively; CHECK:         .functype store_v8i16_with_unfolded_gep_offset (v128, i32) -> ()
105951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
106051cd326fSThomas Lively; CHECK-NEXT:    local.get 1
106151cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
106251cd326fSThomas Lively; CHECK-NEXT:    i32.add
106351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
106451cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
106551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1066e1f67a8bSThomas Lively  %s = getelementptr <8 x i16>, <8 x i16>* %p, i32 1
1067e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
1068e1f67a8bSThomas Lively  ret void
1069e1f67a8bSThomas Lively}
1070e1f67a8bSThomas Lively
1071ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_with_unfolded_gep_offset(<8 x i8> %v, <8 x i8>* %p) {
1072ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_with_unfolded_gep_offset:
1073ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_with_unfolded_gep_offset (v128, i32) -> ()
1074ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1075ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1076ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const 8
1077ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1078ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1079b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1080ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1081ffd8c23cSThomas Lively  %s = getelementptr <8 x i8>, <8 x i8>* %p, i32 1
1082ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
1083ffd8c23cSThomas Lively  ret void
1084ffd8c23cSThomas Lively}
1085ffd8c23cSThomas Lively
1086e1f67a8bSThomas Livelydefine void @store_v8i16_to_numeric_address(<8 x i16> %v) {
108751cd326fSThomas Lively; CHECK-LABEL: store_v8i16_to_numeric_address:
108851cd326fSThomas Lively; CHECK:         .functype store_v8i16_to_numeric_address (v128) -> ()
108951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
109051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
109151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
109251cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
109351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1094e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <8 x i16>*
1095e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* %s
1096e1f67a8bSThomas Lively  ret void
1097e1f67a8bSThomas Lively}
1098e1f67a8bSThomas Lively
1099ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_to_numeric_address(<8 x i8> %v, <8 x i8>* %p) {
1100ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_to_numeric_address:
1101ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_to_numeric_address (v128, i32) -> ()
1102ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1103b69374caSThomas Lively; CHECK-NEXT:    i32.const 32
1104ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1105b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1106ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1107ffd8c23cSThomas Lively  %s = inttoptr i32 32 to <8 x i8>*
1108ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* %s
1109ffd8c23cSThomas Lively  ret void
1110ffd8c23cSThomas Lively}
1111ffd8c23cSThomas Lively
1112e1f67a8bSThomas Livelydefine void @store_v8i16_to_global_address(<8 x i16> %v) {
111351cd326fSThomas Lively; CHECK-LABEL: store_v8i16_to_global_address:
111451cd326fSThomas Lively; CHECK:         .functype store_v8i16_to_global_address (v128) -> ()
111551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
111651cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
111751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
111851cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v8i16
111951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1120e1f67a8bSThomas Lively  store <8 x i16> %v , <8 x i16>* @gv_v8i16
1121e1f67a8bSThomas Lively  ret void
1122e1f67a8bSThomas Lively}
1123e1f67a8bSThomas Lively
1124ffd8c23cSThomas Livelydefine void @store_narrowing_v8i16_to_global_address(<8 x i8> %v) {
1125ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v8i16_to_global_address:
1126ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v8i16_to_global_address (v128) -> ()
1127ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1128b69374caSThomas Lively; CHECK-NEXT:    i32.const gv_v8i8
1129ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1130b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1131ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1132ffd8c23cSThomas Lively  store <8 x i8> %v , <8 x i8>* @gv_v8i8
1133ffd8c23cSThomas Lively  ret void
1134ffd8c23cSThomas Lively}
1135ffd8c23cSThomas Lively
1136e1f67a8bSThomas Lively; ==============================================================================
1137e1f67a8bSThomas Lively; 4 x i32
1138e1f67a8bSThomas Lively; ==============================================================================
1139e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32(<4 x i32>* %p) {
114051cd326fSThomas Lively; CHECK-LABEL: load_v4i32:
114151cd326fSThomas Lively; CHECK:         .functype load_v4i32 (i32) -> (v128)
114251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
114351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
114451cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
114551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1146e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %p
1147e1f67a8bSThomas Lively  ret <4 x i32> %v
1148e1f67a8bSThomas Lively}
1149e1f67a8bSThomas Lively
115099d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32(i32* %addr) {
115151cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32:
115251cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32 (i32) -> (v128)
115351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
115451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1155a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
115651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
115799d3dd28SThomas Lively  %e = load i32, i32* %addr, align 4
115899d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
115999d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
116099d3dd28SThomas Lively  ret <4 x i32> %v2
116199d3dd28SThomas Lively}
116299d3dd28SThomas Lively
116381125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32(<4 x i16>* %p) {
116451cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32:
116551cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32 (i32) -> (v128)
116651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
116751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
116851cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 0
116951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
117081125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %p
117181125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
117281125f73SThomas Lively  ret <4 x i32> %v2
117381125f73SThomas Lively}
117481125f73SThomas Lively
117581125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32(<4 x i16>* %p) {
117651cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32:
117751cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32 (i32) -> (v128)
117851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
117951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
118051cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 0
118151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
118281125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %p
118381125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
118481125f73SThomas Lively  ret <4 x i32> %v2
118581125f73SThomas Lively}
118681125f73SThomas Lively
118781125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32(<4 x i16>* %p) {
118851cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32:
118951cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32 (i32) -> (v128)
119051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
119151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1192b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
119351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
119481125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %p
119581125f73SThomas Lively  ret <4 x i16> %v
119681125f73SThomas Lively}
119781125f73SThomas Lively
1198e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_with_folded_offset(<4 x i32>* %p) {
119951cd326fSThomas Lively; CHECK-LABEL: load_v4i32_with_folded_offset:
120051cd326fSThomas Lively; CHECK:         .functype load_v4i32_with_folded_offset (i32) -> (v128)
120151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
120251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
120351cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
120451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1205e1f67a8bSThomas Lively  %q = ptrtoint <4 x i32>* %p to i32
1206e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
1207e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x i32>*
1208e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1209e1f67a8bSThomas Lively  ret <4 x i32> %v
1210e1f67a8bSThomas Lively}
1211e1f67a8bSThomas Lively
121299d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_with_folded_offset(i32* %p) {
121351cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_with_folded_offset:
121451cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_with_folded_offset (i32) -> (v128)
121551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
121651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1217a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 16
121851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
121999d3dd28SThomas Lively  %q = ptrtoint i32* %p to i32
122099d3dd28SThomas Lively  %r = add nuw i32 %q, 16
122199d3dd28SThomas Lively  %s = inttoptr i32 %r to i32*
122299d3dd28SThomas Lively  %e = load i32, i32* %s
122399d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
122499d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
122599d3dd28SThomas Lively  ret <4 x i32> %v2
122699d3dd28SThomas Lively}
122799d3dd28SThomas Lively
122881125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_with_folded_offset(<4 x i16>* %p) {
122951cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_with_folded_offset:
123051cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_with_folded_offset (i32) -> (v128)
123151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
123251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
123351cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 16
123451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
123581125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
123681125f73SThomas Lively  %r = add nuw i32 %q, 16
123781125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
123881125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
123981125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
124081125f73SThomas Lively  ret <4 x i32> %v2
124181125f73SThomas Lively}
124281125f73SThomas Lively
124381125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_with_folded_offset(<4 x i16>* %p) {
124451cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_with_folded_offset:
124551cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_with_folded_offset (i32) -> (v128)
124651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
124751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
124851cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 16
124951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
125081125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
125181125f73SThomas Lively  %r = add nuw i32 %q, 16
125281125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
125381125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
125481125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
125581125f73SThomas Lively  ret <4 x i32> %v2
125681125f73SThomas Lively}
125781125f73SThomas Lively
125881125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_with_folded_offset(<4 x i16>* %p) {
125951cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_with_folded_offset:
126051cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_with_folded_offset (i32) -> (v128)
126151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
126251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1263b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 16
126451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
126581125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
126681125f73SThomas Lively  %r = add nuw i32 %q, 16
126781125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
126881125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
126981125f73SThomas Lively  ret <4 x i16> %v
127081125f73SThomas Lively}
127181125f73SThomas Lively
1272e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_with_folded_gep_offset(<4 x i32>* %p) {
127351cd326fSThomas Lively; CHECK-LABEL: load_v4i32_with_folded_gep_offset:
127451cd326fSThomas Lively; CHECK:         .functype load_v4i32_with_folded_gep_offset (i32) -> (v128)
127551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
127651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
127751cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
127851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1279e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x i32>, <4 x i32>* %p, i32 1
1280e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1281e1f67a8bSThomas Lively  ret <4 x i32> %v
1282e1f67a8bSThomas Lively}
1283e1f67a8bSThomas Lively
128499d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_with_folded_gep_offset(i32* %p) {
128551cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_with_folded_gep_offset:
128651cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_with_folded_gep_offset (i32) -> (v128)
128751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
128851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1289a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 4
129051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
129199d3dd28SThomas Lively  %s = getelementptr inbounds i32, i32* %p, i32 1
129299d3dd28SThomas Lively  %e = load i32, i32* %s
129399d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
129499d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
129599d3dd28SThomas Lively  ret <4 x i32> %v2
129699d3dd28SThomas Lively}
129799d3dd28SThomas Lively
129881125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_with_folded_gep_offset(<4 x i16>* %p) {
129951cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_with_folded_gep_offset:
130051cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_with_folded_gep_offset (i32) -> (v128)
130151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
130251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
130351cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 8
130451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
130581125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 1
130681125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
130781125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
130881125f73SThomas Lively  ret <4 x i32> %v2
130981125f73SThomas Lively}
131081125f73SThomas Lively
131181125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_with_folded_gep_offset(<4 x i16>* %p) {
131251cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_with_folded_gep_offset:
131351cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_with_folded_gep_offset (i32) -> (v128)
131451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
131551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
131651cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 8
131751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
131881125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 1
131981125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
132081125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
132181125f73SThomas Lively  ret <4 x i32> %v2
132281125f73SThomas Lively}
132381125f73SThomas Lively
132481125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_with_folded_gep_offset(<4 x i16>* %p) {
132551cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_with_folded_gep_offset:
132651cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_with_folded_gep_offset (i32) -> (v128)
132751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
132851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1329b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 8
133051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
133181125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 1
133281125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
133381125f73SThomas Lively  ret <4 x i16> %v
133481125f73SThomas Lively}
133581125f73SThomas Lively
1336e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_with_unfolded_gep_negative_offset(<4 x i32>* %p) {
133751cd326fSThomas Lively; CHECK-LABEL: load_v4i32_with_unfolded_gep_negative_offset:
133851cd326fSThomas Lively; CHECK:         .functype load_v4i32_with_unfolded_gep_negative_offset (i32) -> (v128)
133951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
134051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
134151cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
134251cd326fSThomas Lively; CHECK-NEXT:    i32.add
134351cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
134451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1345e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x i32>, <4 x i32>* %p, i32 -1
1346e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1347e1f67a8bSThomas Lively  ret <4 x i32> %v
1348e1f67a8bSThomas Lively}
1349e1f67a8bSThomas Lively
135099d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_with_unfolded_gep_negative_offset(i32* %p) {
135151cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_with_unfolded_gep_negative_offset:
135251cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_with_unfolded_gep_negative_offset (i32) -> (v128)
135351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
135451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
135551cd326fSThomas Lively; CHECK-NEXT:    i32.const -4
135651cd326fSThomas Lively; CHECK-NEXT:    i32.add
1357a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
135851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
135999d3dd28SThomas Lively  %s = getelementptr inbounds i32, i32* %p, i32 -1
136099d3dd28SThomas Lively  %e = load i32, i32* %s
136199d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
136299d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
136399d3dd28SThomas Lively  ret <4 x i32> %v2
136499d3dd28SThomas Lively}
136599d3dd28SThomas Lively
136681125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_with_unfolded_gep_negative_offset(<4 x i16>* %p) {
136751cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_with_unfolded_gep_negative_offset:
136851cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_with_unfolded_gep_negative_offset (i32) -> (v128)
136951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
137051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
137151cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
137251cd326fSThomas Lively; CHECK-NEXT:    i32.add
137351cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 0
137451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
137581125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 -1
137681125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
137781125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
137881125f73SThomas Lively  ret <4 x i32> %v2
137981125f73SThomas Lively}
138081125f73SThomas Lively
138181125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_with_unfolded_gep_negative_offset(<4 x i16>* %p) {
138251cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_with_unfolded_gep_negative_offset:
138351cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_with_unfolded_gep_negative_offset (i32) -> (v128)
138451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
138551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
138651cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
138751cd326fSThomas Lively; CHECK-NEXT:    i32.add
138851cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 0
138951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
139081125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 -1
139181125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
139281125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
139381125f73SThomas Lively  ret <4 x i32> %v2
139481125f73SThomas Lively}
139581125f73SThomas Lively
139681125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_with_unfolded_gep_negative_offset(<4 x i16>* %p) {
139751cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_with_unfolded_gep_negative_offset:
139851cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_with_unfolded_gep_negative_offset (i32) -> (v128)
139951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
140051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
140151cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
140251cd326fSThomas Lively; CHECK-NEXT:    i32.add
1403b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
140451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
140581125f73SThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 -1
140681125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
140781125f73SThomas Lively  ret <4 x i16> %v
140881125f73SThomas Lively}
140981125f73SThomas Lively
1410e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_with_unfolded_offset(<4 x i32>* %p) {
141151cd326fSThomas Lively; CHECK-LABEL: load_v4i32_with_unfolded_offset:
141251cd326fSThomas Lively; CHECK:         .functype load_v4i32_with_unfolded_offset (i32) -> (v128)
141351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
141451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
141551cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
141651cd326fSThomas Lively; CHECK-NEXT:    i32.add
141751cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
141851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1419e1f67a8bSThomas Lively  %q = ptrtoint <4 x i32>* %p to i32
1420e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
1421e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x i32>*
1422e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1423e1f67a8bSThomas Lively  ret <4 x i32> %v
1424e1f67a8bSThomas Lively}
1425e1f67a8bSThomas Lively
142699d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_with_unfolded_offset(i32* %p) {
142751cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_with_unfolded_offset:
142851cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_with_unfolded_offset (i32) -> (v128)
142951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
143051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
143151cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
143251cd326fSThomas Lively; CHECK-NEXT:    i32.add
1433a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
143451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
143599d3dd28SThomas Lively  %q = ptrtoint i32* %p to i32
143699d3dd28SThomas Lively  %r = add nsw i32 %q, 16
143799d3dd28SThomas Lively  %s = inttoptr i32 %r to i32*
143899d3dd28SThomas Lively  %e = load i32, i32* %s
143999d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
144099d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
144199d3dd28SThomas Lively  ret <4 x i32> %v2
144299d3dd28SThomas Lively}
144399d3dd28SThomas Lively
144481125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_with_unfolded_offset(<4 x i16>* %p) {
144551cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_with_unfolded_offset:
144651cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_with_unfolded_offset (i32) -> (v128)
144751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
144851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
144951cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
145051cd326fSThomas Lively; CHECK-NEXT:    i32.add
145151cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 0
145251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
145381125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
145481125f73SThomas Lively  %r = add nsw i32 %q, 16
145581125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
145681125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
145781125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
145881125f73SThomas Lively  ret <4 x i32> %v2
145981125f73SThomas Lively}
146081125f73SThomas Lively
146181125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_with_unfolded_offset(<4 x i16>* %p) {
146251cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_with_unfolded_offset:
146351cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_with_unfolded_offset (i32) -> (v128)
146451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
146551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
146651cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
146751cd326fSThomas Lively; CHECK-NEXT:    i32.add
146851cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 0
146951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
147081125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
147181125f73SThomas Lively  %r = add nsw i32 %q, 16
147281125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
147381125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
147481125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
147581125f73SThomas Lively  ret <4 x i32> %v2
147681125f73SThomas Lively}
147781125f73SThomas Lively
147881125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_with_unfolded_offset(<4 x i16>* %p) {
147951cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_with_unfolded_offset:
148051cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_with_unfolded_offset (i32) -> (v128)
148151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
148251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
148351cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
148451cd326fSThomas Lively; CHECK-NEXT:    i32.add
1485b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
148651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
148781125f73SThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
148881125f73SThomas Lively  %r = add nsw i32 %q, 16
148981125f73SThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
149081125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
149181125f73SThomas Lively  ret <4 x i16> %v
149281125f73SThomas Lively}
149381125f73SThomas Lively
1494e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_with_unfolded_gep_offset(<4 x i32>* %p) {
149551cd326fSThomas Lively; CHECK-LABEL: load_v4i32_with_unfolded_gep_offset:
149651cd326fSThomas Lively; CHECK:         .functype load_v4i32_with_unfolded_gep_offset (i32) -> (v128)
149751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
149851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
149951cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
150051cd326fSThomas Lively; CHECK-NEXT:    i32.add
150151cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
150251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1503e1f67a8bSThomas Lively  %s = getelementptr <4 x i32>, <4 x i32>* %p, i32 1
1504e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1505e1f67a8bSThomas Lively  ret <4 x i32> %v
1506e1f67a8bSThomas Lively}
1507e1f67a8bSThomas Lively
150899d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_with_unfolded_gep_offset(i32* %p) {
150951cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_with_unfolded_gep_offset:
151051cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_with_unfolded_gep_offset (i32) -> (v128)
151151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
151251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
151351cd326fSThomas Lively; CHECK-NEXT:    i32.const 4
151451cd326fSThomas Lively; CHECK-NEXT:    i32.add
1515a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
151651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
151799d3dd28SThomas Lively  %s = getelementptr i32, i32* %p, i32 1
151899d3dd28SThomas Lively  %e = load i32, i32* %s
151999d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
152099d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
152199d3dd28SThomas Lively  ret <4 x i32> %v2
152299d3dd28SThomas Lively}
152399d3dd28SThomas Lively
152481125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_with_unfolded_gep_offset(<4 x i16>* %p) {
152551cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_with_unfolded_gep_offset:
152651cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_with_unfolded_gep_offset (i32) -> (v128)
152751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
152851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
152951cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
153051cd326fSThomas Lively; CHECK-NEXT:    i32.add
153151cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 0
153251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
153381125f73SThomas Lively  %s = getelementptr <4 x i16>, <4 x i16>* %p, i32 1
153481125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
153581125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
153681125f73SThomas Lively  ret <4 x i32> %v2
153781125f73SThomas Lively}
153881125f73SThomas Lively
153981125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_with_unfolded_gep_offset(<4 x i16>* %p) {
154051cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_with_unfolded_gep_offset:
154151cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_with_unfolded_gep_offset (i32) -> (v128)
154251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
154351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
154451cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
154551cd326fSThomas Lively; CHECK-NEXT:    i32.add
154651cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 0
154751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
154881125f73SThomas Lively  %s = getelementptr <4 x i16>, <4 x i16>* %p, i32 1
154981125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
155081125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
155181125f73SThomas Lively  ret <4 x i32> %v2
155281125f73SThomas Lively}
155381125f73SThomas Lively
155481125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_with_unfolded_gep_offset(<4 x i16>* %p) {
155551cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_with_unfolded_gep_offset:
155651cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_with_unfolded_gep_offset (i32) -> (v128)
155751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
155851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
155951cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
156051cd326fSThomas Lively; CHECK-NEXT:    i32.add
1561b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
156251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
156381125f73SThomas Lively  %s = getelementptr <4 x i16>, <4 x i16>* %p, i32 1
156481125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
156581125f73SThomas Lively  ret <4 x i16> %v
156681125f73SThomas Lively}
156781125f73SThomas Lively
1568e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_from_numeric_address() {
156951cd326fSThomas Lively; CHECK-LABEL: load_v4i32_from_numeric_address:
157051cd326fSThomas Lively; CHECK:         .functype load_v4i32_from_numeric_address () -> (v128)
157151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
157251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
157351cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
157451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1575e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <4 x i32>*
1576e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* %s
1577e1f67a8bSThomas Lively  ret <4 x i32> %v
1578e1f67a8bSThomas Lively}
1579e1f67a8bSThomas Lively
158099d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_from_numeric_address() {
158151cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_from_numeric_address:
158251cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_from_numeric_address () -> (v128)
158351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
158451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
1585a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 32
158651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
158799d3dd28SThomas Lively  %s = inttoptr i32 32 to i32*
158899d3dd28SThomas Lively  %e = load i32, i32* %s
158999d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
159099d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
159199d3dd28SThomas Lively  ret <4 x i32> %v2
159299d3dd28SThomas Lively}
159399d3dd28SThomas Lively
159481125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_from_numeric_address() {
159551cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_from_numeric_address:
159651cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_from_numeric_address () -> (v128)
159751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
159851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
159951cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s 32
160051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
160181125f73SThomas Lively  %s = inttoptr i32 32 to <4 x i16>*
160281125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
160381125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
160481125f73SThomas Lively  ret <4 x i32> %v2
160581125f73SThomas Lively}
160681125f73SThomas Lively
160781125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_from_numeric_address() {
160851cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_from_numeric_address:
160951cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_from_numeric_address () -> (v128)
161051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
161151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
161251cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u 32
161351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
161481125f73SThomas Lively  %s = inttoptr i32 32 to <4 x i16>*
161581125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
161681125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
161781125f73SThomas Lively  ret <4 x i32> %v2
161881125f73SThomas Lively}
161981125f73SThomas Lively
162081125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_from_numeric_address() {
162151cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_from_numeric_address:
162251cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_from_numeric_address () -> (v128)
162351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
162451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
1625b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 32
162651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
162781125f73SThomas Lively  %s = inttoptr i32 32 to <4 x i16>*
162881125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* %s
162981125f73SThomas Lively  ret <4 x i16> %v
163081125f73SThomas Lively}
163181125f73SThomas Lively
1632e1f67a8bSThomas Lively@gv_v4i32 = global <4 x i32> <i32 42, i32 42, i32 42, i32 42>
1633e1f67a8bSThomas Livelydefine <4 x i32> @load_v4i32_from_global_address() {
163451cd326fSThomas Lively; CHECK-LABEL: load_v4i32_from_global_address:
163551cd326fSThomas Lively; CHECK:         .functype load_v4i32_from_global_address () -> (v128)
163651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
163751cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
163851cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v4i32
163951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1640e1f67a8bSThomas Lively  %v = load <4 x i32>, <4 x i32>* @gv_v4i32
1641e1f67a8bSThomas Lively  ret <4 x i32> %v
1642e1f67a8bSThomas Lively}
1643e1f67a8bSThomas Lively
164499d3dd28SThomas Lively@gv_i32 = global i32 42
164599d3dd28SThomas Livelydefine <4 x i32> @load_splat_v4i32_from_global_address() {
164651cd326fSThomas Lively; CHECK-LABEL: load_splat_v4i32_from_global_address:
164751cd326fSThomas Lively; CHECK:         .functype load_splat_v4i32_from_global_address () -> (v128)
164851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
164951cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
1650a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat gv_i32
165151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
165299d3dd28SThomas Lively  %e = load i32, i32* @gv_i32
165399d3dd28SThomas Lively  %v1 = insertelement <4 x i32> undef, i32 %e, i32 0
165499d3dd28SThomas Lively  %v2 = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> zeroinitializer
165599d3dd28SThomas Lively  ret <4 x i32> %v2
165699d3dd28SThomas Lively}
165799d3dd28SThomas Lively
165881125f73SThomas Lively@gv_v4i16 = global <4 x i16> <i16 42, i16 42, i16 42, i16 42>
165981125f73SThomas Livelydefine <4 x i32> @load_sext_v4i32_from_global_address() {
166051cd326fSThomas Lively; CHECK-LABEL: load_sext_v4i32_from_global_address:
166151cd326fSThomas Lively; CHECK:         .functype load_sext_v4i32_from_global_address () -> (v128)
166251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
166351cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
166451cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_s gv_v4i16
166551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
166681125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* @gv_v4i16
166781125f73SThomas Lively  %v2 = sext <4 x i16> %v to <4 x i32>
166881125f73SThomas Lively  ret <4 x i32> %v2
166981125f73SThomas Lively}
167081125f73SThomas Lively
167181125f73SThomas Livelydefine <4 x i32> @load_zext_v4i32_from_global_address() {
167251cd326fSThomas Lively; CHECK-LABEL: load_zext_v4i32_from_global_address:
167351cd326fSThomas Lively; CHECK:         .functype load_zext_v4i32_from_global_address () -> (v128)
167451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
167551cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
167651cd326fSThomas Lively; CHECK-NEXT:    i32x4.load16x4_u gv_v4i16
167751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
167881125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* @gv_v4i16
167981125f73SThomas Lively  %v2 = zext <4 x i16> %v to <4 x i32>
168081125f73SThomas Lively  ret <4 x i32> %v2
168181125f73SThomas Lively}
168281125f73SThomas Lively
168381125f73SThomas Livelydefine <4 x i16> @load_ext_v4i32_from_global_address() {
168451cd326fSThomas Lively; CHECK-LABEL: load_ext_v4i32_from_global_address:
168551cd326fSThomas Lively; CHECK:         .functype load_ext_v4i32_from_global_address () -> (v128)
168651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
168751cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
1688b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero gv_v4i16
168951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
169081125f73SThomas Lively  %v = load <4 x i16>, <4 x i16>* @gv_v4i16
169181125f73SThomas Lively  ret <4 x i16> %v
169281125f73SThomas Lively}
169381125f73SThomas Lively
1694e1f67a8bSThomas Livelydefine void @store_v4i32(<4 x i32> %v, <4 x i32>* %p) {
169551cd326fSThomas Lively; CHECK-LABEL: store_v4i32:
169651cd326fSThomas Lively; CHECK:         .functype store_v4i32 (v128, i32) -> ()
169751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
169851cd326fSThomas Lively; CHECK-NEXT:    local.get 1
169951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
170051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
170151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1702e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %p
1703e1f67a8bSThomas Lively  ret void
1704e1f67a8bSThomas Lively}
1705e1f67a8bSThomas Lively
1706ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32(<4 x i16> %v, <4 x i16>* %p) {
1707ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32:
1708ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32 (v128, i32) -> ()
1709ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1710ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1711ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1712b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1713ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1714ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %p
1715ffd8c23cSThomas Lively  ret void
1716ffd8c23cSThomas Lively}
1717ffd8c23cSThomas Lively
1718e1f67a8bSThomas Livelydefine void @store_v4i32_with_folded_offset(<4 x i32> %v, <4 x i32>* %p) {
171951cd326fSThomas Lively; CHECK-LABEL: store_v4i32_with_folded_offset:
172051cd326fSThomas Lively; CHECK:         .functype store_v4i32_with_folded_offset (v128, i32) -> ()
172151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
172251cd326fSThomas Lively; CHECK-NEXT:    local.get 1
172351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
172451cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
172551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1726e1f67a8bSThomas Lively  %q = ptrtoint <4 x i32>* %p to i32
1727e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
1728e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x i32>*
1729e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1730e1f67a8bSThomas Lively  ret void
1731e1f67a8bSThomas Lively}
1732e1f67a8bSThomas Lively
1733ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_with_folded_offset(<4 x i16> %v, <4 x i16>* %p) {
1734ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_with_folded_offset:
1735ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_with_folded_offset (v128, i32) -> ()
1736ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1737ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1738b69374caSThomas Lively; CHECK-NEXT:    i32.const 16
1739b69374caSThomas Lively; CHECK-NEXT:    i32.add
1740ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1741b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1742ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1743ffd8c23cSThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
1744ffd8c23cSThomas Lively  %r = add nuw i32 %q, 16
1745ffd8c23cSThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
1746ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1747ffd8c23cSThomas Lively  ret void
1748ffd8c23cSThomas Lively}
1749ffd8c23cSThomas Lively
1750e1f67a8bSThomas Livelydefine void @store_v4i32_with_folded_gep_offset(<4 x i32> %v, <4 x i32>* %p) {
175151cd326fSThomas Lively; CHECK-LABEL: store_v4i32_with_folded_gep_offset:
175251cd326fSThomas Lively; CHECK:         .functype store_v4i32_with_folded_gep_offset (v128, i32) -> ()
175351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
175451cd326fSThomas Lively; CHECK-NEXT:    local.get 1
175551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
175651cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
175751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1758e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x i32>, <4 x i32>* %p, i32 1
1759e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1760e1f67a8bSThomas Lively  ret void
1761e1f67a8bSThomas Lively}
1762e1f67a8bSThomas Lively
1763ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_with_folded_gep_offset(<4 x i16> %v, <4 x i16>* %p) {
1764ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_with_folded_gep_offset:
1765ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_with_folded_gep_offset (v128, i32) -> ()
1766ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1767ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1768b69374caSThomas Lively; CHECK-NEXT:    i32.const 8
1769b69374caSThomas Lively; CHECK-NEXT:    i32.add
1770ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1771b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1772ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1773ffd8c23cSThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 1
1774ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1775ffd8c23cSThomas Lively  ret void
1776ffd8c23cSThomas Lively}
1777ffd8c23cSThomas Lively
1778e1f67a8bSThomas Livelydefine void @store_v4i32_with_unfolded_gep_negative_offset(<4 x i32> %v, <4 x i32>* %p) {
177951cd326fSThomas Lively; CHECK-LABEL: store_v4i32_with_unfolded_gep_negative_offset:
178051cd326fSThomas Lively; CHECK:         .functype store_v4i32_with_unfolded_gep_negative_offset (v128, i32) -> ()
178151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
178251cd326fSThomas Lively; CHECK-NEXT:    local.get 1
178351cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
178451cd326fSThomas Lively; CHECK-NEXT:    i32.add
178551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
178651cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
178751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1788e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x i32>, <4 x i32>* %p, i32 -1
1789e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1790e1f67a8bSThomas Lively  ret void
1791e1f67a8bSThomas Lively}
1792e1f67a8bSThomas Lively
1793ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_with_unfolded_gep_negative_offset(<4 x i16> %v, <4 x i16>* %p) {
1794ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_with_unfolded_gep_negative_offset:
1795ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_with_unfolded_gep_negative_offset (v128, i32) -> ()
1796ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1797ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1798ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const -8
1799ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1800ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1801b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1802ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1803ffd8c23cSThomas Lively  %s = getelementptr inbounds <4 x i16>, <4 x i16>* %p, i32 -1
1804ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1805ffd8c23cSThomas Lively  ret void
1806ffd8c23cSThomas Lively}
1807ffd8c23cSThomas Lively
1808e1f67a8bSThomas Livelydefine void @store_v4i32_with_unfolded_offset(<4 x i32> %v, <4 x i32>* %p) {
180951cd326fSThomas Lively; CHECK-LABEL: store_v4i32_with_unfolded_offset:
181051cd326fSThomas Lively; CHECK:         .functype store_v4i32_with_unfolded_offset (v128, i32) -> ()
181151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
181251cd326fSThomas Lively; CHECK-NEXT:    local.get 1
1813a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
181451cd326fSThomas Lively; CHECK-NEXT:    i32.add
181551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
181651cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
181751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1818a4594592SThomas Lively  %q = ptrtoint <4 x i32>* %p to i32
1819a4594592SThomas Lively  %r = add nsw i32 %q, 16
1820a4594592SThomas Lively  %s = inttoptr i32 %r to <4 x i32>*
1821e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1822e1f67a8bSThomas Lively  ret void
1823e1f67a8bSThomas Lively}
1824e1f67a8bSThomas Lively
1825ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_with_unfolded_offset(<4 x i16> %v, <4 x i16>* %p) {
1826ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_with_unfolded_offset:
1827ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_with_unfolded_offset (v128, i32) -> ()
1828ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1829ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1830ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const 16
1831ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1832ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1833b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1834ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1835ffd8c23cSThomas Lively  %q = ptrtoint <4 x i16>* %p to i32
1836ffd8c23cSThomas Lively  %r = add nsw i32 %q, 16
1837ffd8c23cSThomas Lively  %s = inttoptr i32 %r to <4 x i16>*
1838ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1839ffd8c23cSThomas Lively  ret void
1840ffd8c23cSThomas Lively}
1841ffd8c23cSThomas Lively
1842e1f67a8bSThomas Livelydefine void @store_v4i32_with_unfolded_gep_offset(<4 x i32> %v, <4 x i32>* %p) {
184351cd326fSThomas Lively; CHECK-LABEL: store_v4i32_with_unfolded_gep_offset:
184451cd326fSThomas Lively; CHECK:         .functype store_v4i32_with_unfolded_gep_offset (v128, i32) -> ()
184551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
184651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
184751cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
184851cd326fSThomas Lively; CHECK-NEXT:    i32.add
184951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
185051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
185151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1852e1f67a8bSThomas Lively  %s = getelementptr <4 x i32>, <4 x i32>* %p, i32 1
1853e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1854e1f67a8bSThomas Lively  ret void
1855e1f67a8bSThomas Lively}
1856e1f67a8bSThomas Lively
1857ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_with_unfolded_gep_offset(<4 x i16> %v, <4 x i16>* %p) {
1858ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_with_unfolded_gep_offset:
1859ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_with_unfolded_gep_offset (v128, i32) -> ()
1860ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1861ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 1
1862ffd8c23cSThomas Lively; CHECK-NEXT:    i32.const 8
1863ffd8c23cSThomas Lively; CHECK-NEXT:    i32.add
1864ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1865b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1866ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1867ffd8c23cSThomas Lively  %s = getelementptr <4 x i16>, <4 x i16>* %p, i32 1
1868ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1869ffd8c23cSThomas Lively  ret void
1870ffd8c23cSThomas Lively}
1871ffd8c23cSThomas Lively
1872e1f67a8bSThomas Livelydefine void @store_v4i32_to_numeric_address(<4 x i32> %v) {
187351cd326fSThomas Lively; CHECK-LABEL: store_v4i32_to_numeric_address:
187451cd326fSThomas Lively; CHECK:         .functype store_v4i32_to_numeric_address (v128) -> ()
187551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
187651cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
187751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
187851cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
187951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1880e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <4 x i32>*
1881e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* %s
1882e1f67a8bSThomas Lively  ret void
1883e1f67a8bSThomas Lively}
1884e1f67a8bSThomas Lively
1885ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_to_numeric_address(<4 x i16> %v) {
1886ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_to_numeric_address:
1887ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_to_numeric_address (v128) -> ()
1888ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1889b69374caSThomas Lively; CHECK-NEXT:    i32.const 32
1890ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1891b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1892ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1893ffd8c23cSThomas Lively  %s = inttoptr i32 32 to <4 x i16>*
1894ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* %s
1895ffd8c23cSThomas Lively  ret void
1896ffd8c23cSThomas Lively}
1897ffd8c23cSThomas Lively
1898e1f67a8bSThomas Livelydefine void @store_v4i32_to_global_address(<4 x i32> %v) {
189951cd326fSThomas Lively; CHECK-LABEL: store_v4i32_to_global_address:
190051cd326fSThomas Lively; CHECK:         .functype store_v4i32_to_global_address (v128) -> ()
190151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
190251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
190351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
190451cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v4i32
190551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1906e1f67a8bSThomas Lively  store <4 x i32> %v , <4 x i32>* @gv_v4i32
1907e1f67a8bSThomas Lively  ret void
1908e1f67a8bSThomas Lively}
1909e1f67a8bSThomas Lively
1910ffd8c23cSThomas Livelydefine void @store_narrowing_v4i32_to_global_address(<4 x i16> %v) {
1911ffd8c23cSThomas Lively; CHECK-LABEL: store_narrowing_v4i32_to_global_address:
1912ffd8c23cSThomas Lively; CHECK:         .functype store_narrowing_v4i32_to_global_address (v128) -> ()
1913ffd8c23cSThomas Lively; CHECK-NEXT:  # %bb.0:
1914b69374caSThomas Lively; CHECK-NEXT:    i32.const gv_v4i16
1915ffd8c23cSThomas Lively; CHECK-NEXT:    local.get 0
1916b69374caSThomas Lively; CHECK-NEXT:    v128.store64_lane 0, 0
1917ffd8c23cSThomas Lively; CHECK-NEXT:    # fallthrough-return
1918ffd8c23cSThomas Lively  store <4 x i16> %v , <4 x i16>* @gv_v4i16
1919ffd8c23cSThomas Lively  ret void
1920ffd8c23cSThomas Lively}
1921ffd8c23cSThomas Lively
1922e1f67a8bSThomas Lively; ==============================================================================
1923e1f67a8bSThomas Lively; 2 x i64
1924e1f67a8bSThomas Lively; ==============================================================================
1925e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64(<2 x i64>* %p) {
192651cd326fSThomas Lively; CHECK-LABEL: load_v2i64:
192751cd326fSThomas Lively; CHECK:         .functype load_v2i64 (i32) -> (v128)
192851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
192951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
193051cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
193151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1932e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %p
1933e1f67a8bSThomas Lively  ret <2 x i64> %v
1934e1f67a8bSThomas Lively}
1935e1f67a8bSThomas Lively
193699d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64(i64* %p) {
193751cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64:
193851cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64 (i32) -> (v128)
193951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
194051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1941a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
194251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
194399d3dd28SThomas Lively  %e = load i64, i64* %p
194499d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
194599d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
194699d3dd28SThomas Lively  ret <2 x i64> %v2
194799d3dd28SThomas Lively}
194899d3dd28SThomas Lively
194981125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64(<2 x i32>* %p) {
195051cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64:
195151cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64 (i32) -> (v128)
195251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
195351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
195451cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 0
195551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
195681125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %p
195781125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
195881125f73SThomas Lively  ret <2 x i64> %v2
195981125f73SThomas Lively}
196081125f73SThomas Lively
196181125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64(<2 x i32>* %p) {
196251cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64:
196351cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64 (i32) -> (v128)
196451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
196551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
196651cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 0
196751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
196881125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %p
196981125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
197081125f73SThomas Lively  ret <2 x i64> %v2
197181125f73SThomas Lively}
197281125f73SThomas Lively
197381125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64(<2 x i32>* %p) {
197451cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64:
197551cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64 (i32) -> (v128)
197651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
197751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
1978b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
197951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
198081125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %p
198181125f73SThomas Lively  ret <2 x i32> %v
198281125f73SThomas Lively}
198381125f73SThomas Lively
1984e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_with_folded_offset(<2 x i64>* %p) {
198551cd326fSThomas Lively; CHECK-LABEL: load_v2i64_with_folded_offset:
198651cd326fSThomas Lively; CHECK:         .functype load_v2i64_with_folded_offset (i32) -> (v128)
198751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
198851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
198951cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
199051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
1991e1f67a8bSThomas Lively  %q = ptrtoint <2 x i64>* %p to i32
1992e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
1993e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x i64>*
1994e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
1995e1f67a8bSThomas Lively  ret <2 x i64> %v
1996e1f67a8bSThomas Lively}
1997e1f67a8bSThomas Lively
199899d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_with_folded_offset(i64* %p) {
199951cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_with_folded_offset:
200051cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_with_folded_offset (i32) -> (v128)
200151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
200251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2003a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 16
200451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
200599d3dd28SThomas Lively  %q = ptrtoint i64* %p to i32
200699d3dd28SThomas Lively  %r = add nuw i32 %q, 16
200799d3dd28SThomas Lively  %s = inttoptr i32 %r to i64*
200899d3dd28SThomas Lively  %e = load i64, i64* %s
200999d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
201099d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
201199d3dd28SThomas Lively  ret <2 x i64> %v2
201299d3dd28SThomas Lively}
201399d3dd28SThomas Lively
201481125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_with_folded_offset(<2 x i32>* %p) {
201551cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_with_folded_offset:
201651cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_with_folded_offset (i32) -> (v128)
201751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
201851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
201951cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 16
202051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
202181125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
202281125f73SThomas Lively  %r = add nuw i32 %q, 16
202381125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
202481125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
202581125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
202681125f73SThomas Lively  ret <2 x i64> %v2
202781125f73SThomas Lively}
202881125f73SThomas Lively
202981125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_with_folded_offset(<2 x i32>* %p) {
203051cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_with_folded_offset:
203151cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_with_folded_offset (i32) -> (v128)
203251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
203351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
203451cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 16
203551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
203681125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
203781125f73SThomas Lively  %r = add nuw i32 %q, 16
203881125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
203981125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
204081125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
204181125f73SThomas Lively  ret <2 x i64> %v2
204281125f73SThomas Lively}
204381125f73SThomas Lively
204481125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_with_folded_offset(<2 x i32>* %p) {
204551cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_with_folded_offset:
204651cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_with_folded_offset (i32) -> (v128)
204751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
204851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2049b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 16
205051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
205181125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
205281125f73SThomas Lively  %r = add nuw i32 %q, 16
205381125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
205481125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
205581125f73SThomas Lively  ret <2 x i32> %v
205681125f73SThomas Lively}
205781125f73SThomas Lively
2058e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_with_folded_gep_offset(<2 x i64>* %p) {
205951cd326fSThomas Lively; CHECK-LABEL: load_v2i64_with_folded_gep_offset:
206051cd326fSThomas Lively; CHECK:         .functype load_v2i64_with_folded_gep_offset (i32) -> (v128)
206151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
206251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
206351cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
206451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2065e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x i64>, <2 x i64>* %p, i32 1
2066e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
2067e1f67a8bSThomas Lively  ret <2 x i64> %v
2068e1f67a8bSThomas Lively}
2069e1f67a8bSThomas Lively
207099d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_with_folded_gep_offset(i64* %p) {
207151cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_with_folded_gep_offset:
207251cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_with_folded_gep_offset (i32) -> (v128)
207351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
207451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2075a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 8
207651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
207799d3dd28SThomas Lively  %s = getelementptr inbounds i64, i64* %p, i32 1
207899d3dd28SThomas Lively  %e = load i64, i64* %s
207999d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
208099d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
208199d3dd28SThomas Lively  ret <2 x i64> %v2
208299d3dd28SThomas Lively}
208399d3dd28SThomas Lively
208481125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_with_folded_gep_offset(<2 x i32>* %p) {
208551cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_with_folded_gep_offset:
208651cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_with_folded_gep_offset (i32) -> (v128)
208751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
208851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
208951cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 8
209051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
209181125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 1
209281125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
209381125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
209481125f73SThomas Lively  ret <2 x i64> %v2
209581125f73SThomas Lively}
209681125f73SThomas Lively
209781125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_with_folded_gep_offset(<2 x i32>* %p) {
209851cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_with_folded_gep_offset:
209951cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_with_folded_gep_offset (i32) -> (v128)
210051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
210151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
210251cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 8
210351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
210481125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 1
210581125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
210681125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
210781125f73SThomas Lively  ret <2 x i64> %v2
210881125f73SThomas Lively}
210981125f73SThomas Lively
211081125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_with_folded_gep_offset(<2 x i32>* %p) {
211151cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_with_folded_gep_offset:
211251cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_with_folded_gep_offset (i32) -> (v128)
211351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
211451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2115b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 8
211651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
211781125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 1
211881125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
211981125f73SThomas Lively  ret <2 x i32> %v
212081125f73SThomas Lively}
212181125f73SThomas Lively
2122e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_with_unfolded_gep_negative_offset(<2 x i64>* %p) {
212351cd326fSThomas Lively; CHECK-LABEL: load_v2i64_with_unfolded_gep_negative_offset:
212451cd326fSThomas Lively; CHECK:         .functype load_v2i64_with_unfolded_gep_negative_offset (i32) -> (v128)
212551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
212651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
212751cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
212851cd326fSThomas Lively; CHECK-NEXT:    i32.add
212951cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
213051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2131e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x i64>, <2 x i64>* %p, i32 -1
2132e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
2133e1f67a8bSThomas Lively  ret <2 x i64> %v
2134e1f67a8bSThomas Lively}
2135e1f67a8bSThomas Lively
213699d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_with_unfolded_gep_negative_offset(i64* %p) {
213751cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_with_unfolded_gep_negative_offset:
213851cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_with_unfolded_gep_negative_offset (i32) -> (v128)
213951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
214051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
214151cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
214251cd326fSThomas Lively; CHECK-NEXT:    i32.add
2143a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
214451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
214599d3dd28SThomas Lively  %s = getelementptr inbounds i64, i64* %p, i32 -1
214699d3dd28SThomas Lively  %e = load i64, i64* %s
214799d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
214899d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
214999d3dd28SThomas Lively  ret <2 x i64> %v2
215099d3dd28SThomas Lively}
215199d3dd28SThomas Lively
215281125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_with_unfolded_gep_negative_offset(<2 x i32>* %p) {
215351cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_with_unfolded_gep_negative_offset:
215451cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_with_unfolded_gep_negative_offset (i32) -> (v128)
215551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
215651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
215751cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
215851cd326fSThomas Lively; CHECK-NEXT:    i32.add
215951cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 0
216051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
216181125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 -1
216281125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
216381125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
216481125f73SThomas Lively  ret <2 x i64> %v2
216581125f73SThomas Lively}
216681125f73SThomas Lively
216781125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_with_unfolded_gep_negative_offset(<2 x i32>* %p) {
216851cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_with_unfolded_gep_negative_offset:
216951cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_with_unfolded_gep_negative_offset (i32) -> (v128)
217051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
217151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
217251cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
217351cd326fSThomas Lively; CHECK-NEXT:    i32.add
217451cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 0
217551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
217681125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 -1
217781125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
217881125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
217981125f73SThomas Lively  ret <2 x i64> %v2
218081125f73SThomas Lively}
218181125f73SThomas Lively
218281125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_with_unfolded_gep_negative_offset(<2 x i32>* %p) {
218351cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_with_unfolded_gep_negative_offset:
218451cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_with_unfolded_gep_negative_offset (i32) -> (v128)
218551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
218651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
218751cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
218851cd326fSThomas Lively; CHECK-NEXT:    i32.add
2189b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
219051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
219181125f73SThomas Lively  %s = getelementptr inbounds <2 x i32>, <2 x i32>* %p, i32 -1
219281125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
219381125f73SThomas Lively  ret <2 x i32> %v
219481125f73SThomas Lively}
219581125f73SThomas Lively
2196e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_with_unfolded_offset(<2 x i64>* %p) {
219751cd326fSThomas Lively; CHECK-LABEL: load_v2i64_with_unfolded_offset:
219851cd326fSThomas Lively; CHECK:         .functype load_v2i64_with_unfolded_offset (i32) -> (v128)
219951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
220051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
220151cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
220251cd326fSThomas Lively; CHECK-NEXT:    i32.add
220351cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
220451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2205e1f67a8bSThomas Lively  %q = ptrtoint <2 x i64>* %p to i32
2206e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
2207e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x i64>*
2208e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
2209e1f67a8bSThomas Lively  ret <2 x i64> %v
2210e1f67a8bSThomas Lively}
2211e1f67a8bSThomas Lively
221299d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_with_unfolded_offset(i64* %p) {
221351cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_with_unfolded_offset:
221451cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_with_unfolded_offset (i32) -> (v128)
221551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
221651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
221751cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
221851cd326fSThomas Lively; CHECK-NEXT:    i32.add
2219a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
222051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
222199d3dd28SThomas Lively  %q = ptrtoint i64* %p to i32
222299d3dd28SThomas Lively  %r = add nsw i32 %q, 16
222399d3dd28SThomas Lively  %s = inttoptr i32 %r to i64*
222499d3dd28SThomas Lively  %e = load i64, i64* %s
222599d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
222699d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
222799d3dd28SThomas Lively  ret <2 x i64> %v2
222899d3dd28SThomas Lively}
222999d3dd28SThomas Lively
223081125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_with_unfolded_offset(<2 x i32>* %p) {
223151cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_with_unfolded_offset:
223251cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_with_unfolded_offset (i32) -> (v128)
223351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
223451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
223551cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
223651cd326fSThomas Lively; CHECK-NEXT:    i32.add
223751cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 0
223851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
223981125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
224081125f73SThomas Lively  %r = add nsw i32 %q, 16
224181125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
224281125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
224381125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
224481125f73SThomas Lively  ret <2 x i64> %v2
224581125f73SThomas Lively}
224681125f73SThomas Lively
224781125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_with_unfolded_offset(<2 x i32>* %p) {
224851cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_with_unfolded_offset:
224951cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_with_unfolded_offset (i32) -> (v128)
225051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
225151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
225251cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
225351cd326fSThomas Lively; CHECK-NEXT:    i32.add
225451cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 0
225551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
225681125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
225781125f73SThomas Lively  %r = add nsw i32 %q, 16
225881125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
225981125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
226081125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
226181125f73SThomas Lively  ret <2 x i64> %v2
226281125f73SThomas Lively}
226381125f73SThomas Lively
226481125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_with_unfolded_offset(<2 x i32>* %p) {
226551cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_with_unfolded_offset:
226651cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_with_unfolded_offset (i32) -> (v128)
226751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
226851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
226951cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
227051cd326fSThomas Lively; CHECK-NEXT:    i32.add
2271b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
227251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
227381125f73SThomas Lively  %q = ptrtoint <2 x i32>* %p to i32
227481125f73SThomas Lively  %r = add nsw i32 %q, 16
227581125f73SThomas Lively  %s = inttoptr i32 %r to <2 x i32>*
227681125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
227781125f73SThomas Lively  ret <2 x i32> %v
227881125f73SThomas Lively}
227981125f73SThomas Lively
2280e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_with_unfolded_gep_offset(<2 x i64>* %p) {
228151cd326fSThomas Lively; CHECK-LABEL: load_v2i64_with_unfolded_gep_offset:
228251cd326fSThomas Lively; CHECK:         .functype load_v2i64_with_unfolded_gep_offset (i32) -> (v128)
228351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
228451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
228551cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
228651cd326fSThomas Lively; CHECK-NEXT:    i32.add
228751cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
228851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2289e1f67a8bSThomas Lively  %s = getelementptr <2 x i64>, <2 x i64>* %p, i32 1
2290e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
2291e1f67a8bSThomas Lively  ret <2 x i64> %v
2292e1f67a8bSThomas Lively}
2293e1f67a8bSThomas Lively
229499d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_with_unfolded_gep_offset(i64* %p) {
229551cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_with_unfolded_gep_offset:
229651cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_with_unfolded_gep_offset (i32) -> (v128)
229751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
229851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
229951cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
230051cd326fSThomas Lively; CHECK-NEXT:    i32.add
2301a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
230251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
230399d3dd28SThomas Lively  %s = getelementptr i64, i64* %p, i32 1
230499d3dd28SThomas Lively  %e = load i64, i64* %s
230599d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
230699d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
230799d3dd28SThomas Lively  ret <2 x i64> %v2
230899d3dd28SThomas Lively}
230999d3dd28SThomas Lively
231081125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_with_unfolded_gep_offset(<2 x i32>* %p) {
231151cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_with_unfolded_gep_offset:
231251cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_with_unfolded_gep_offset (i32) -> (v128)
231351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
231451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
231551cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
231651cd326fSThomas Lively; CHECK-NEXT:    i32.add
231751cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 0
231851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
231981125f73SThomas Lively  %s = getelementptr <2 x i32>, <2 x i32>* %p, i32 1
232081125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
232181125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
232281125f73SThomas Lively  ret <2 x i64> %v2
232381125f73SThomas Lively}
232481125f73SThomas Lively
232581125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_with_unfolded_gep_offset(<2 x i32>* %p) {
232651cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_with_unfolded_gep_offset:
232751cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_with_unfolded_gep_offset (i32) -> (v128)
232851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
232951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
233051cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
233151cd326fSThomas Lively; CHECK-NEXT:    i32.add
233251cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 0
233351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
233481125f73SThomas Lively  %s = getelementptr <2 x i32>, <2 x i32>* %p, i32 1
233581125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
233681125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
233781125f73SThomas Lively  ret <2 x i64> %v2
233881125f73SThomas Lively}
233981125f73SThomas Lively
234081125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_with_unfolded_gep_offset(<2 x i32>* %p) {
234151cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_with_unfolded_gep_offset:
234251cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_with_unfolded_gep_offset (i32) -> (v128)
234351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
234451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
234551cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
234651cd326fSThomas Lively; CHECK-NEXT:    i32.add
2347b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 0
234851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
234981125f73SThomas Lively  %s = getelementptr <2 x i32>, <2 x i32>* %p, i32 1
235081125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
235181125f73SThomas Lively  ret <2 x i32> %v
235281125f73SThomas Lively}
235381125f73SThomas Lively
2354e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_from_numeric_address() {
235551cd326fSThomas Lively; CHECK-LABEL: load_v2i64_from_numeric_address:
235651cd326fSThomas Lively; CHECK:         .functype load_v2i64_from_numeric_address () -> (v128)
235751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
235851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
235951cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
236051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2361e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <2 x i64>*
2362e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* %s
2363e1f67a8bSThomas Lively  ret <2 x i64> %v
2364e1f67a8bSThomas Lively}
2365e1f67a8bSThomas Lively
236699d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_from_numeric_address() {
236751cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_from_numeric_address:
236851cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_from_numeric_address () -> (v128)
236951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
237051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2371a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 32
237251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
237399d3dd28SThomas Lively  %s = inttoptr i32 32 to i64*
237499d3dd28SThomas Lively  %e = load i64, i64* %s
237599d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
237699d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
237799d3dd28SThomas Lively  ret <2 x i64> %v2
237899d3dd28SThomas Lively}
237999d3dd28SThomas Lively
238081125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_from_numeric_address() {
238151cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_from_numeric_address:
238251cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_from_numeric_address () -> (v128)
238351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
238451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
238551cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s 32
238651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
238781125f73SThomas Lively  %s = inttoptr i32 32 to <2 x i32>*
238881125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
238981125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
239081125f73SThomas Lively  ret <2 x i64> %v2
239181125f73SThomas Lively}
239281125f73SThomas Lively
239381125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_from_numeric_address() {
239451cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_from_numeric_address:
239551cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_from_numeric_address () -> (v128)
239651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
239751cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
239851cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u 32
239951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
240081125f73SThomas Lively  %s = inttoptr i32 32 to <2 x i32>*
240181125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
240281125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
240381125f73SThomas Lively  ret <2 x i64> %v2
240481125f73SThomas Lively}
240581125f73SThomas Lively
240681125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_from_numeric_address() {
240751cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_from_numeric_address:
240851cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_from_numeric_address () -> (v128)
240951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
241051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2411b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero 32
241251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
241381125f73SThomas Lively  %s = inttoptr i32 32 to <2 x i32>*
241481125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* %s
241581125f73SThomas Lively  ret <2 x i32> %v
241681125f73SThomas Lively}
241781125f73SThomas Lively
2418e1f67a8bSThomas Lively@gv_v2i64 = global <2 x i64> <i64 42, i64 42>
2419e1f67a8bSThomas Livelydefine <2 x i64> @load_v2i64_from_global_address() {
242051cd326fSThomas Lively; CHECK-LABEL: load_v2i64_from_global_address:
242151cd326fSThomas Lively; CHECK:         .functype load_v2i64_from_global_address () -> (v128)
242251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
242351cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
242451cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v2i64
242551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2426e1f67a8bSThomas Lively  %v = load <2 x i64>, <2 x i64>* @gv_v2i64
2427e1f67a8bSThomas Lively  ret <2 x i64> %v
2428e1f67a8bSThomas Lively}
2429e1f67a8bSThomas Lively
243099d3dd28SThomas Lively@gv_i64 = global i64 42
243199d3dd28SThomas Livelydefine <2 x i64> @load_splat_v2i64_from_global_address() {
243251cd326fSThomas Lively; CHECK-LABEL: load_splat_v2i64_from_global_address:
243351cd326fSThomas Lively; CHECK:         .functype load_splat_v2i64_from_global_address () -> (v128)
243451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
243551cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2436a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat gv_i64
243751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
243899d3dd28SThomas Lively  %e = load i64, i64* @gv_i64
243999d3dd28SThomas Lively  %v1 = insertelement <2 x i64> undef, i64 %e, i32 0
244099d3dd28SThomas Lively  %v2 = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer
244199d3dd28SThomas Lively  ret <2 x i64> %v2
244299d3dd28SThomas Lively}
244399d3dd28SThomas Lively
244481125f73SThomas Lively@gv_v2i32 = global <2 x i32> <i32 42, i32 42>
244581125f73SThomas Livelydefine <2 x i64> @load_sext_v2i64_from_global_address() {
244651cd326fSThomas Lively; CHECK-LABEL: load_sext_v2i64_from_global_address:
244751cd326fSThomas Lively; CHECK:         .functype load_sext_v2i64_from_global_address () -> (v128)
244851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
244951cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
245051cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_s gv_v2i32
245151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
245281125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* @gv_v2i32
245381125f73SThomas Lively  %v2 = sext <2 x i32> %v to <2 x i64>
245481125f73SThomas Lively  ret <2 x i64> %v2
245581125f73SThomas Lively}
245681125f73SThomas Lively
245781125f73SThomas Livelydefine <2 x i64> @load_zext_v2i64_from_global_address() {
245851cd326fSThomas Lively; CHECK-LABEL: load_zext_v2i64_from_global_address:
245951cd326fSThomas Lively; CHECK:         .functype load_zext_v2i64_from_global_address () -> (v128)
246051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
246151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
246251cd326fSThomas Lively; CHECK-NEXT:    i64x2.load32x2_u gv_v2i32
246351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
246481125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* @gv_v2i32
246581125f73SThomas Lively  %v2 = zext <2 x i32> %v to <2 x i64>
246681125f73SThomas Lively  ret <2 x i64> %v2
246781125f73SThomas Lively}
246881125f73SThomas Lively
246981125f73SThomas Livelydefine <2 x i32> @load_ext_v2i64_from_global_address() {
247051cd326fSThomas Lively; CHECK-LABEL: load_ext_v2i64_from_global_address:
247151cd326fSThomas Lively; CHECK:         .functype load_ext_v2i64_from_global_address () -> (v128)
247251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
247351cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2474b69374caSThomas Lively; CHECK-NEXT:    v128.load64_zero gv_v2i32
247551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
247681125f73SThomas Lively  %v = load <2 x i32>, <2 x i32>* @gv_v2i32
247781125f73SThomas Lively  ret <2 x i32> %v
247881125f73SThomas Lively}
247981125f73SThomas Lively
2480e1f67a8bSThomas Livelydefine void @store_v2i64(<2 x i64> %v, <2 x i64>* %p) {
248151cd326fSThomas Lively; CHECK-LABEL: store_v2i64:
248251cd326fSThomas Lively; CHECK:         .functype store_v2i64 (v128, i32) -> ()
248351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
248451cd326fSThomas Lively; CHECK-NEXT:    local.get 1
248551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
248651cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
248751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2488e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %p
2489e1f67a8bSThomas Lively  ret void
2490e1f67a8bSThomas Lively}
2491e1f67a8bSThomas Lively
2492e1f67a8bSThomas Livelydefine void @store_v2i64_with_folded_offset(<2 x i64> %v, <2 x i64>* %p) {
249351cd326fSThomas Lively; CHECK-LABEL: store_v2i64_with_folded_offset:
249451cd326fSThomas Lively; CHECK:         .functype store_v2i64_with_folded_offset (v128, i32) -> ()
249551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
249651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
249751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
249851cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
249951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2500e1f67a8bSThomas Lively  %q = ptrtoint <2 x i64>* %p to i32
2501e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
2502e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x i64>*
2503e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2504e1f67a8bSThomas Lively  ret void
2505e1f67a8bSThomas Lively}
2506e1f67a8bSThomas Lively
2507e1f67a8bSThomas Livelydefine void @store_v2i64_with_folded_gep_offset(<2 x i64> %v, <2 x i64>* %p) {
250851cd326fSThomas Lively; CHECK-LABEL: store_v2i64_with_folded_gep_offset:
250951cd326fSThomas Lively; CHECK:         .functype store_v2i64_with_folded_gep_offset (v128, i32) -> ()
251051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
251151cd326fSThomas Lively; CHECK-NEXT:    local.get 1
251251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
251351cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
251451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2515e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x i64>, <2 x i64>* %p, i32 1
2516e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2517e1f67a8bSThomas Lively  ret void
2518e1f67a8bSThomas Lively}
2519e1f67a8bSThomas Lively
2520e1f67a8bSThomas Livelydefine void @store_v2i64_with_unfolded_gep_negative_offset(<2 x i64> %v, <2 x i64>* %p) {
252151cd326fSThomas Lively; CHECK-LABEL: store_v2i64_with_unfolded_gep_negative_offset:
252251cd326fSThomas Lively; CHECK:         .functype store_v2i64_with_unfolded_gep_negative_offset (v128, i32) -> ()
252351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
252451cd326fSThomas Lively; CHECK-NEXT:    local.get 1
252551cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
252651cd326fSThomas Lively; CHECK-NEXT:    i32.add
252751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
252851cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
252951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2530e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x i64>, <2 x i64>* %p, i32 -1
2531e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2532e1f67a8bSThomas Lively  ret void
2533e1f67a8bSThomas Lively}
2534e1f67a8bSThomas Lively
2535e1f67a8bSThomas Livelydefine void @store_v2i64_with_unfolded_offset(<2 x i64> %v, <2 x i64>* %p) {
253651cd326fSThomas Lively; CHECK-LABEL: store_v2i64_with_unfolded_offset:
253751cd326fSThomas Lively; CHECK:         .functype store_v2i64_with_unfolded_offset (v128, i32) -> ()
253851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
253951cd326fSThomas Lively; CHECK-NEXT:    local.get 1
2540a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
254151cd326fSThomas Lively; CHECK-NEXT:    i32.add
254251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
254351cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
254451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2545a4594592SThomas Lively  %q = ptrtoint <2 x i64>* %p to i32
2546a4594592SThomas Lively  %r = add nsw i32 %q, 16
2547a4594592SThomas Lively  %s = inttoptr i32 %r to <2 x i64>*
2548e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2549e1f67a8bSThomas Lively  ret void
2550e1f67a8bSThomas Lively}
2551e1f67a8bSThomas Lively
2552e1f67a8bSThomas Livelydefine void @store_v2i64_with_unfolded_gep_offset(<2 x i64> %v, <2 x i64>* %p) {
255351cd326fSThomas Lively; CHECK-LABEL: store_v2i64_with_unfolded_gep_offset:
255451cd326fSThomas Lively; CHECK:         .functype store_v2i64_with_unfolded_gep_offset (v128, i32) -> ()
255551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
255651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
255751cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
255851cd326fSThomas Lively; CHECK-NEXT:    i32.add
255951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
256051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
256151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2562e1f67a8bSThomas Lively  %s = getelementptr <2 x i64>, <2 x i64>* %p, i32 1
2563e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2564e1f67a8bSThomas Lively  ret void
2565e1f67a8bSThomas Lively}
2566e1f67a8bSThomas Lively
2567e1f67a8bSThomas Livelydefine void @store_v2i64_to_numeric_address(<2 x i64> %v) {
256851cd326fSThomas Lively; CHECK-LABEL: store_v2i64_to_numeric_address:
256951cd326fSThomas Lively; CHECK:         .functype store_v2i64_to_numeric_address (v128) -> ()
257051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
257151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
257251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
257351cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
257451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2575e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <2 x i64>*
2576e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* %s
2577e1f67a8bSThomas Lively  ret void
2578e1f67a8bSThomas Lively}
2579e1f67a8bSThomas Lively
2580e1f67a8bSThomas Livelydefine void @store_v2i64_to_global_address(<2 x i64> %v) {
258151cd326fSThomas Lively; CHECK-LABEL: store_v2i64_to_global_address:
258251cd326fSThomas Lively; CHECK:         .functype store_v2i64_to_global_address (v128) -> ()
258351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
258451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
258551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
258651cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v2i64
258751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2588e1f67a8bSThomas Lively  store <2 x i64> %v , <2 x i64>* @gv_v2i64
2589e1f67a8bSThomas Lively  ret void
2590e1f67a8bSThomas Lively}
2591e1f67a8bSThomas Lively
2592e1f67a8bSThomas Lively; ==============================================================================
2593e1f67a8bSThomas Lively; 4 x float
2594e1f67a8bSThomas Lively; ==============================================================================
2595e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32(<4 x float>* %p) {
259651cd326fSThomas Lively; CHECK-LABEL: load_v4f32:
259751cd326fSThomas Lively; CHECK:         .functype load_v4f32 (i32) -> (v128)
259851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
259951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
260051cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
260151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2602e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %p
2603e1f67a8bSThomas Lively  ret <4 x float> %v
2604e1f67a8bSThomas Lively}
2605e1f67a8bSThomas Lively
260699d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32(float* %p) {
260751cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32:
260851cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32 (i32) -> (v128)
260951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
261051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2611a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
261251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
261399d3dd28SThomas Lively  %e = load float, float* %p
261499d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
261599d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
261699d3dd28SThomas Lively  ret <4 x float> %v2
261799d3dd28SThomas Lively}
261899d3dd28SThomas Lively
2619e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_with_folded_offset(<4 x float>* %p) {
262051cd326fSThomas Lively; CHECK-LABEL: load_v4f32_with_folded_offset:
262151cd326fSThomas Lively; CHECK:         .functype load_v4f32_with_folded_offset (i32) -> (v128)
262251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
262351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
262451cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
262551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2626e1f67a8bSThomas Lively  %q = ptrtoint <4 x float>* %p to i32
2627e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
2628e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x float>*
2629e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2630e1f67a8bSThomas Lively  ret <4 x float> %v
2631e1f67a8bSThomas Lively}
2632e1f67a8bSThomas Lively
263399d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_with_folded_offset(float* %p) {
263451cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_with_folded_offset:
263551cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_with_folded_offset (i32) -> (v128)
263651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
263751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2638a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 16
263951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
264099d3dd28SThomas Lively  %q = ptrtoint float* %p to i32
264199d3dd28SThomas Lively  %r = add nuw i32 %q, 16
264299d3dd28SThomas Lively  %s = inttoptr i32 %r to float*
264399d3dd28SThomas Lively  %e = load float, float* %s
264499d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
264599d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
264699d3dd28SThomas Lively  ret <4 x float> %v2
264799d3dd28SThomas Lively}
264899d3dd28SThomas Lively
2649e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_with_folded_gep_offset(<4 x float>* %p) {
265051cd326fSThomas Lively; CHECK-LABEL: load_v4f32_with_folded_gep_offset:
265151cd326fSThomas Lively; CHECK:         .functype load_v4f32_with_folded_gep_offset (i32) -> (v128)
265251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
265351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
265451cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
265551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2656e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x float>, <4 x float>* %p, i32 1
2657e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2658e1f67a8bSThomas Lively  ret <4 x float> %v
2659e1f67a8bSThomas Lively}
2660e1f67a8bSThomas Lively
266199d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_with_folded_gep_offset(float* %p) {
266251cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_with_folded_gep_offset:
266351cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_with_folded_gep_offset (i32) -> (v128)
266451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
266551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2666a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 4
266751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
266899d3dd28SThomas Lively  %s = getelementptr inbounds float, float* %p, i32 1
266999d3dd28SThomas Lively  %e = load float, float* %s
267099d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
267199d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
267299d3dd28SThomas Lively  ret <4 x float> %v2
267399d3dd28SThomas Lively}
267499d3dd28SThomas Lively
2675e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_with_unfolded_gep_negative_offset(<4 x float>* %p) {
267651cd326fSThomas Lively; CHECK-LABEL: load_v4f32_with_unfolded_gep_negative_offset:
267751cd326fSThomas Lively; CHECK:         .functype load_v4f32_with_unfolded_gep_negative_offset (i32) -> (v128)
267851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
267951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
268051cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
268151cd326fSThomas Lively; CHECK-NEXT:    i32.add
268251cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
268351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2684e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x float>, <4 x float>* %p, i32 -1
2685e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2686e1f67a8bSThomas Lively  ret <4 x float> %v
2687e1f67a8bSThomas Lively}
2688e1f67a8bSThomas Lively
268999d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_with_unfolded_gep_negative_offset(float* %p) {
269051cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_with_unfolded_gep_negative_offset:
269151cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_with_unfolded_gep_negative_offset (i32) -> (v128)
269251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
269351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
269451cd326fSThomas Lively; CHECK-NEXT:    i32.const -4
269551cd326fSThomas Lively; CHECK-NEXT:    i32.add
2696a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
269751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
269899d3dd28SThomas Lively  %s = getelementptr inbounds float, float* %p, i32 -1
269999d3dd28SThomas Lively  %e = load float, float* %s
270099d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
270199d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
270299d3dd28SThomas Lively  ret <4 x float> %v2
270399d3dd28SThomas Lively}
270499d3dd28SThomas Lively
2705e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_with_unfolded_offset(<4 x float>* %p) {
270651cd326fSThomas Lively; CHECK-LABEL: load_v4f32_with_unfolded_offset:
270751cd326fSThomas Lively; CHECK:         .functype load_v4f32_with_unfolded_offset (i32) -> (v128)
270851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
270951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
271051cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
271151cd326fSThomas Lively; CHECK-NEXT:    i32.add
271251cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
271351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2714e1f67a8bSThomas Lively  %q = ptrtoint <4 x float>* %p to i32
2715e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
2716e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x float>*
2717e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2718e1f67a8bSThomas Lively  ret <4 x float> %v
2719e1f67a8bSThomas Lively}
2720e1f67a8bSThomas Lively
272199d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_with_unfolded_offset(float* %p) {
272251cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_with_unfolded_offset:
272351cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_with_unfolded_offset (i32) -> (v128)
272451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
272551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
272651cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
272751cd326fSThomas Lively; CHECK-NEXT:    i32.add
2728a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
272951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
273099d3dd28SThomas Lively  %q = ptrtoint float* %p to i32
273199d3dd28SThomas Lively  %r = add nsw i32 %q, 16
273299d3dd28SThomas Lively  %s = inttoptr i32 %r to float*
273399d3dd28SThomas Lively  %e = load float, float* %s
273499d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
273599d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
273699d3dd28SThomas Lively  ret <4 x float> %v2
273799d3dd28SThomas Lively}
273899d3dd28SThomas Lively
2739e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_with_unfolded_gep_offset(<4 x float>* %p) {
274051cd326fSThomas Lively; CHECK-LABEL: load_v4f32_with_unfolded_gep_offset:
274151cd326fSThomas Lively; CHECK:         .functype load_v4f32_with_unfolded_gep_offset (i32) -> (v128)
274251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
274351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
274451cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
274551cd326fSThomas Lively; CHECK-NEXT:    i32.add
274651cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
274751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2748e1f67a8bSThomas Lively  %s = getelementptr <4 x float>, <4 x float>* %p, i32 1
2749e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2750e1f67a8bSThomas Lively  ret <4 x float> %v
2751e1f67a8bSThomas Lively}
2752e1f67a8bSThomas Lively
275399d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_with_unfolded_gep_offset(float* %p) {
275451cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_with_unfolded_gep_offset:
275551cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_with_unfolded_gep_offset (i32) -> (v128)
275651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
275751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
275851cd326fSThomas Lively; CHECK-NEXT:    i32.const 4
275951cd326fSThomas Lively; CHECK-NEXT:    i32.add
2760a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 0
276151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
276299d3dd28SThomas Lively  %s = getelementptr float, float* %p, i32 1
276399d3dd28SThomas Lively  %e = load float, float* %s
276499d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
276599d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
276699d3dd28SThomas Lively  ret <4 x float> %v2
276799d3dd28SThomas Lively}
276899d3dd28SThomas Lively
2769e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_from_numeric_address() {
277051cd326fSThomas Lively; CHECK-LABEL: load_v4f32_from_numeric_address:
277151cd326fSThomas Lively; CHECK:         .functype load_v4f32_from_numeric_address () -> (v128)
277251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
277351cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
277451cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
277551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2776e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <4 x float>*
2777e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* %s
2778e1f67a8bSThomas Lively  ret <4 x float> %v
2779e1f67a8bSThomas Lively}
2780e1f67a8bSThomas Lively
278199d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_from_numeric_address() {
278251cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_from_numeric_address:
278351cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_from_numeric_address () -> (v128)
278451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
278551cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2786a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat 32
278751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
278899d3dd28SThomas Lively  %s = inttoptr i32 32 to float*
278999d3dd28SThomas Lively  %e = load float, float* %s
279099d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
279199d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
279299d3dd28SThomas Lively  ret <4 x float> %v2
279399d3dd28SThomas Lively}
279499d3dd28SThomas Lively
2795e1f67a8bSThomas Lively@gv_v4f32 = global <4 x float> <float 42., float 42., float 42., float 42.>
2796e1f67a8bSThomas Livelydefine <4 x float> @load_v4f32_from_global_address() {
279751cd326fSThomas Lively; CHECK-LABEL: load_v4f32_from_global_address:
279851cd326fSThomas Lively; CHECK:         .functype load_v4f32_from_global_address () -> (v128)
279951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
280051cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
280151cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v4f32
280251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2803e1f67a8bSThomas Lively  %v = load <4 x float>, <4 x float>* @gv_v4f32
2804e1f67a8bSThomas Lively  ret <4 x float> %v
2805e1f67a8bSThomas Lively}
2806e1f67a8bSThomas Lively
280799d3dd28SThomas Lively@gv_f32 = global float 42.
280899d3dd28SThomas Livelydefine <4 x float> @load_splat_v4f32_from_global_address() {
280951cd326fSThomas Lively; CHECK-LABEL: load_splat_v4f32_from_global_address:
281051cd326fSThomas Lively; CHECK:         .functype load_splat_v4f32_from_global_address () -> (v128)
281151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
281251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
2813a781a706SThomas Lively; CHECK-NEXT:    v128.load32_splat gv_f32
281451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
281599d3dd28SThomas Lively  %e = load float, float* @gv_f32
281699d3dd28SThomas Lively  %v1 = insertelement <4 x float> undef, float %e, i32 0
281799d3dd28SThomas Lively  %v2 = shufflevector <4 x float> %v1, <4 x float> undef, <4 x i32> zeroinitializer
281899d3dd28SThomas Lively  ret <4 x float> %v2
281999d3dd28SThomas Lively}
282099d3dd28SThomas Lively
2821e1f67a8bSThomas Livelydefine void @store_v4f32(<4 x float> %v, <4 x float>* %p) {
282251cd326fSThomas Lively; CHECK-LABEL: store_v4f32:
282351cd326fSThomas Lively; CHECK:         .functype store_v4f32 (v128, i32) -> ()
282451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
282551cd326fSThomas Lively; CHECK-NEXT:    local.get 1
282651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
282751cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
282851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2829e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %p
2830e1f67a8bSThomas Lively  ret void
2831e1f67a8bSThomas Lively}
2832e1f67a8bSThomas Lively
2833e1f67a8bSThomas Livelydefine void @store_v4f32_with_folded_offset(<4 x float> %v, <4 x float>* %p) {
283451cd326fSThomas Lively; CHECK-LABEL: store_v4f32_with_folded_offset:
283551cd326fSThomas Lively; CHECK:         .functype store_v4f32_with_folded_offset (v128, i32) -> ()
283651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
283751cd326fSThomas Lively; CHECK-NEXT:    local.get 1
283851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
283951cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
284051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2841e1f67a8bSThomas Lively  %q = ptrtoint <4 x float>* %p to i32
2842e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
2843e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <4 x float>*
2844e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2845e1f67a8bSThomas Lively  ret void
2846e1f67a8bSThomas Lively}
2847e1f67a8bSThomas Lively
2848e1f67a8bSThomas Livelydefine void @store_v4f32_with_folded_gep_offset(<4 x float> %v, <4 x float>* %p) {
284951cd326fSThomas Lively; CHECK-LABEL: store_v4f32_with_folded_gep_offset:
285051cd326fSThomas Lively; CHECK:         .functype store_v4f32_with_folded_gep_offset (v128, i32) -> ()
285151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
285251cd326fSThomas Lively; CHECK-NEXT:    local.get 1
285351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
285451cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
285551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2856e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x float>, <4 x float>* %p, i32 1
2857e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2858e1f67a8bSThomas Lively  ret void
2859e1f67a8bSThomas Lively}
2860e1f67a8bSThomas Lively
2861e1f67a8bSThomas Livelydefine void @store_v4f32_with_unfolded_gep_negative_offset(<4 x float> %v, <4 x float>* %p) {
286251cd326fSThomas Lively; CHECK-LABEL: store_v4f32_with_unfolded_gep_negative_offset:
286351cd326fSThomas Lively; CHECK:         .functype store_v4f32_with_unfolded_gep_negative_offset (v128, i32) -> ()
286451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
286551cd326fSThomas Lively; CHECK-NEXT:    local.get 1
286651cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
286751cd326fSThomas Lively; CHECK-NEXT:    i32.add
286851cd326fSThomas Lively; CHECK-NEXT:    local.get 0
286951cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
287051cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2871e1f67a8bSThomas Lively  %s = getelementptr inbounds <4 x float>, <4 x float>* %p, i32 -1
2872e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2873e1f67a8bSThomas Lively  ret void
2874e1f67a8bSThomas Lively}
2875e1f67a8bSThomas Lively
2876e1f67a8bSThomas Livelydefine void @store_v4f32_with_unfolded_offset(<4 x float> %v, <4 x float>* %p) {
287751cd326fSThomas Lively; CHECK-LABEL: store_v4f32_with_unfolded_offset:
287851cd326fSThomas Lively; CHECK:         .functype store_v4f32_with_unfolded_offset (v128, i32) -> ()
287951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
288051cd326fSThomas Lively; CHECK-NEXT:    local.get 1
2881a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
288251cd326fSThomas Lively; CHECK-NEXT:    i32.add
288351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
288451cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
288551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2886a4594592SThomas Lively  %q = ptrtoint <4 x float>* %p to i32
2887a4594592SThomas Lively  %r = add nsw i32 %q, 16
2888a4594592SThomas Lively  %s = inttoptr i32 %r to <4 x float>*
2889e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2890e1f67a8bSThomas Lively  ret void
2891e1f67a8bSThomas Lively}
2892e1f67a8bSThomas Lively
2893e1f67a8bSThomas Livelydefine void @store_v4f32_with_unfolded_gep_offset(<4 x float> %v, <4 x float>* %p) {
289451cd326fSThomas Lively; CHECK-LABEL: store_v4f32_with_unfolded_gep_offset:
289551cd326fSThomas Lively; CHECK:         .functype store_v4f32_with_unfolded_gep_offset (v128, i32) -> ()
289651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
289751cd326fSThomas Lively; CHECK-NEXT:    local.get 1
289851cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
289951cd326fSThomas Lively; CHECK-NEXT:    i32.add
290051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
290151cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
290251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2903e1f67a8bSThomas Lively  %s = getelementptr <4 x float>, <4 x float>* %p, i32 1
2904e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2905e1f67a8bSThomas Lively  ret void
2906e1f67a8bSThomas Lively}
2907e1f67a8bSThomas Lively
2908e1f67a8bSThomas Livelydefine void @store_v4f32_to_numeric_address(<4 x float> %v) {
290951cd326fSThomas Lively; CHECK-LABEL: store_v4f32_to_numeric_address:
291051cd326fSThomas Lively; CHECK:         .functype store_v4f32_to_numeric_address (v128) -> ()
291151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
291251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
291351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
291451cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
291551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2916e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <4 x float>*
2917e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* %s
2918e1f67a8bSThomas Lively  ret void
2919e1f67a8bSThomas Lively}
2920e1f67a8bSThomas Lively
2921e1f67a8bSThomas Livelydefine void @store_v4f32_to_global_address(<4 x float> %v) {
292251cd326fSThomas Lively; CHECK-LABEL: store_v4f32_to_global_address:
292351cd326fSThomas Lively; CHECK:         .functype store_v4f32_to_global_address (v128) -> ()
292451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
292551cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
292651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
292751cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v4f32
292851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2929e1f67a8bSThomas Lively  store <4 x float> %v , <4 x float>* @gv_v4f32
2930e1f67a8bSThomas Lively  ret void
2931e1f67a8bSThomas Lively}
2932e1f67a8bSThomas Lively
2933e1f67a8bSThomas Lively; ==============================================================================
2934e1f67a8bSThomas Lively; 2 x double
2935e1f67a8bSThomas Lively; ==============================================================================
2936e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64(<2 x double>* %p) {
293751cd326fSThomas Lively; CHECK-LABEL: load_v2f64:
293851cd326fSThomas Lively; CHECK:         .functype load_v2f64 (i32) -> (v128)
293951cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
294051cd326fSThomas Lively; CHECK-NEXT:    local.get 0
294151cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
294251cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2943e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %p
2944e1f67a8bSThomas Lively  ret <2 x double> %v
2945e1f67a8bSThomas Lively}
2946e1f67a8bSThomas Lively
294799d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64(double* %p) {
294851cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64:
294951cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64 (i32) -> (v128)
295051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
295151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2952a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
295351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
295499d3dd28SThomas Lively  %e = load double, double* %p
295599d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
295699d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
295799d3dd28SThomas Lively  ret <2 x double> %v2
295899d3dd28SThomas Lively}
295999d3dd28SThomas Lively
2960*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64(<2 x float>* %p) {
2961*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64:
2962*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64 (i32) -> (v128)
2963*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
2964*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
2965*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
2966*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
2967*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
2968*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %p
2969*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
2970*fec47492SThomas Lively  ret <2 x double> %v
2971*fec47492SThomas Lively}
2972*fec47492SThomas Lively
2973e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_with_folded_offset(<2 x double>* %p) {
297451cd326fSThomas Lively; CHECK-LABEL: load_v2f64_with_folded_offset:
297551cd326fSThomas Lively; CHECK:         .functype load_v2f64_with_folded_offset (i32) -> (v128)
297651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
297751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
297851cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
297951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
2980e1f67a8bSThomas Lively  %q = ptrtoint <2 x double>* %p to i32
2981e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
2982e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x double>*
2983e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
2984e1f67a8bSThomas Lively  ret <2 x double> %v
2985e1f67a8bSThomas Lively}
2986e1f67a8bSThomas Lively
298799d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_with_folded_offset(double* %p) {
298851cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_with_folded_offset:
298951cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_with_folded_offset (i32) -> (v128)
299051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
299151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
2992a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 16
299351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
299499d3dd28SThomas Lively  %q = ptrtoint double* %p to i32
299599d3dd28SThomas Lively  %r = add nuw i32 %q, 16
299699d3dd28SThomas Lively  %s = inttoptr i32 %r to double*
299799d3dd28SThomas Lively  %e = load double, double* %s
299899d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
299999d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
300099d3dd28SThomas Lively  ret <2 x double> %v2
300199d3dd28SThomas Lively}
300299d3dd28SThomas Lively
3003*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_with_folded_offset(<2 x float>* %p) {
3004*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_with_folded_offset:
3005*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_with_folded_offset (i32) -> (v128)
3006*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3007*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
3008*fec47492SThomas Lively; CHECK-NEXT:    i32.const 16
3009*fec47492SThomas Lively; CHECK-NEXT:    i32.add
3010*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3011*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3012*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3013*fec47492SThomas Lively  %q = ptrtoint <2 x float>* %p to i32
3014*fec47492SThomas Lively  %r = add nuw i32 %q, 16
3015*fec47492SThomas Lively  %s = inttoptr i32 %r to <2 x float>*
3016*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3017*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3018*fec47492SThomas Lively  ret <2 x double> %v
3019*fec47492SThomas Lively}
3020*fec47492SThomas Lively
3021e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_with_folded_gep_offset(<2 x double>* %p) {
302251cd326fSThomas Lively; CHECK-LABEL: load_v2f64_with_folded_gep_offset:
302351cd326fSThomas Lively; CHECK:         .functype load_v2f64_with_folded_gep_offset (i32) -> (v128)
302451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
302551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
302651cd326fSThomas Lively; CHECK-NEXT:    v128.load 16
302751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3028e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x double>, <2 x double>* %p, i32 1
3029e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
3030e1f67a8bSThomas Lively  ret <2 x double> %v
3031e1f67a8bSThomas Lively}
3032e1f67a8bSThomas Lively
303399d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_with_folded_gep_offset(double* %p) {
303451cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_with_folded_gep_offset:
303551cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_with_folded_gep_offset (i32) -> (v128)
303651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
303751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
3038a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 8
303951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
304099d3dd28SThomas Lively  %s = getelementptr inbounds double, double* %p, i32 1
304199d3dd28SThomas Lively  %e = load double, double* %s
304299d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
304399d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
304499d3dd28SThomas Lively  ret <2 x double> %v2
304599d3dd28SThomas Lively}
304699d3dd28SThomas Lively
3047*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_with_folded_gep_offset(<2 x float>* %p) {
3048*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_with_folded_gep_offset:
3049*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_with_folded_gep_offset (i32) -> (v128)
3050*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3051*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
3052*fec47492SThomas Lively; CHECK-NEXT:    i32.const 8
3053*fec47492SThomas Lively; CHECK-NEXT:    i32.add
3054*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3055*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3056*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3057*fec47492SThomas Lively  %s = getelementptr inbounds <2 x float>, <2 x float>* %p, i32 1
3058*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3059*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3060*fec47492SThomas Lively  ret <2 x double> %v
3061*fec47492SThomas Lively}
3062*fec47492SThomas Lively
3063e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_with_unfolded_gep_negative_offset(<2 x double>* %p) {
306451cd326fSThomas Lively; CHECK-LABEL: load_v2f64_with_unfolded_gep_negative_offset:
306551cd326fSThomas Lively; CHECK:         .functype load_v2f64_with_unfolded_gep_negative_offset (i32) -> (v128)
306651cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
306751cd326fSThomas Lively; CHECK-NEXT:    local.get 0
306851cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
306951cd326fSThomas Lively; CHECK-NEXT:    i32.add
307051cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
307151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3072e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x double>, <2 x double>* %p, i32 -1
3073e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
3074e1f67a8bSThomas Lively  ret <2 x double> %v
3075e1f67a8bSThomas Lively}
3076e1f67a8bSThomas Lively
307799d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_with_unfolded_gep_negative_offset(double* %p) {
307851cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_with_unfolded_gep_negative_offset:
307951cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_with_unfolded_gep_negative_offset (i32) -> (v128)
308051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
308151cd326fSThomas Lively; CHECK-NEXT:    local.get 0
308251cd326fSThomas Lively; CHECK-NEXT:    i32.const -8
308351cd326fSThomas Lively; CHECK-NEXT:    i32.add
3084a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
308551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
308699d3dd28SThomas Lively  %s = getelementptr inbounds double, double* %p, i32 -1
308799d3dd28SThomas Lively  %e = load double, double* %s
308899d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
308999d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
309099d3dd28SThomas Lively  ret <2 x double> %v2
309199d3dd28SThomas Lively}
309299d3dd28SThomas Lively
3093*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_with_unfolded_gep_negative_offset(<2 x float>* %p) {
3094*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_with_unfolded_gep_negative_offset:
3095*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_with_unfolded_gep_negative_offset (i32) -> (v128)
3096*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3097*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
3098*fec47492SThomas Lively; CHECK-NEXT:    i32.const -8
3099*fec47492SThomas Lively; CHECK-NEXT:    i32.add
3100*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3101*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3102*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3103*fec47492SThomas Lively  %s = getelementptr inbounds <2 x float>, <2 x float>* %p, i32 -1
3104*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3105*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3106*fec47492SThomas Lively  ret <2 x double> %v
3107*fec47492SThomas Lively}
3108*fec47492SThomas Lively
3109e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_with_unfolded_offset(<2 x double>* %p) {
311051cd326fSThomas Lively; CHECK-LABEL: load_v2f64_with_unfolded_offset:
311151cd326fSThomas Lively; CHECK:         .functype load_v2f64_with_unfolded_offset (i32) -> (v128)
311251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
311351cd326fSThomas Lively; CHECK-NEXT:    local.get 0
311451cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
311551cd326fSThomas Lively; CHECK-NEXT:    i32.add
311651cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
311751cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3118e1f67a8bSThomas Lively  %q = ptrtoint <2 x double>* %p to i32
3119e1f67a8bSThomas Lively  %r = add nsw i32 %q, 16
3120e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x double>*
3121e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
3122e1f67a8bSThomas Lively  ret <2 x double> %v
3123e1f67a8bSThomas Lively}
3124e1f67a8bSThomas Lively
312599d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_with_unfolded_offset(double* %p) {
312651cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_with_unfolded_offset:
312751cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_with_unfolded_offset (i32) -> (v128)
312851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
312951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
313051cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
313151cd326fSThomas Lively; CHECK-NEXT:    i32.add
3132a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
313351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
313499d3dd28SThomas Lively  %q = ptrtoint double* %p to i32
313599d3dd28SThomas Lively  %r = add nsw i32 %q, 16
313699d3dd28SThomas Lively  %s = inttoptr i32 %r to double*
313799d3dd28SThomas Lively  %e = load double, double* %s
313899d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
313999d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
314099d3dd28SThomas Lively  ret <2 x double> %v2
314199d3dd28SThomas Lively}
314299d3dd28SThomas Lively
3143*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_with_unfolded_offset(<2 x float>* %p) {
3144*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_with_unfolded_offset:
3145*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_with_unfolded_offset (i32) -> (v128)
3146*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3147*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
3148*fec47492SThomas Lively; CHECK-NEXT:    i32.const 16
3149*fec47492SThomas Lively; CHECK-NEXT:    i32.add
3150*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3151*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3152*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3153*fec47492SThomas Lively  %q = ptrtoint <2 x float>* %p to i32
3154*fec47492SThomas Lively  %r = add nsw i32 %q, 16
3155*fec47492SThomas Lively  %s = inttoptr i32 %r to <2 x float>*
3156*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3157*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3158*fec47492SThomas Lively  ret <2 x double> %v
3159*fec47492SThomas Lively}
3160*fec47492SThomas Lively
3161e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_with_unfolded_gep_offset(<2 x double>* %p) {
316251cd326fSThomas Lively; CHECK-LABEL: load_v2f64_with_unfolded_gep_offset:
316351cd326fSThomas Lively; CHECK:         .functype load_v2f64_with_unfolded_gep_offset (i32) -> (v128)
316451cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
316551cd326fSThomas Lively; CHECK-NEXT:    local.get 0
316651cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
316751cd326fSThomas Lively; CHECK-NEXT:    i32.add
316851cd326fSThomas Lively; CHECK-NEXT:    v128.load 0
316951cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3170e1f67a8bSThomas Lively  %s = getelementptr <2 x double>, <2 x double>* %p, i32 1
3171e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
3172e1f67a8bSThomas Lively  ret <2 x double> %v
3173e1f67a8bSThomas Lively}
3174e1f67a8bSThomas Lively
317599d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_with_unfolded_gep_offset(double* %p) {
317651cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_with_unfolded_gep_offset:
317751cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_with_unfolded_gep_offset (i32) -> (v128)
317851cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
317951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
318051cd326fSThomas Lively; CHECK-NEXT:    i32.const 8
318151cd326fSThomas Lively; CHECK-NEXT:    i32.add
3182a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 0
318351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
318499d3dd28SThomas Lively  %s = getelementptr double, double* %p, i32 1
318599d3dd28SThomas Lively  %e = load double, double* %s
318699d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
318799d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
318899d3dd28SThomas Lively  ret <2 x double> %v2
318999d3dd28SThomas Lively}
319099d3dd28SThomas Lively
3191*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_with_unfolded_gep_offset(<2 x float>* %p) {
3192*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_with_unfolded_gep_offset:
3193*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_with_unfolded_gep_offset (i32) -> (v128)
3194*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3195*fec47492SThomas Lively; CHECK-NEXT:    local.get 0
3196*fec47492SThomas Lively; CHECK-NEXT:    i32.const 8
3197*fec47492SThomas Lively; CHECK-NEXT:    i32.add
3198*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3199*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3200*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3201*fec47492SThomas Lively  %s = getelementptr <2 x float>, <2 x float>* %p, i32 1
3202*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3203*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3204*fec47492SThomas Lively  ret <2 x double> %v
3205*fec47492SThomas Lively}
3206*fec47492SThomas Lively
3207e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_from_numeric_address() {
320851cd326fSThomas Lively; CHECK-LABEL: load_v2f64_from_numeric_address:
320951cd326fSThomas Lively; CHECK:         .functype load_v2f64_from_numeric_address () -> (v128)
321051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
321151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
321251cd326fSThomas Lively; CHECK-NEXT:    v128.load 32
321351cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3214e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <2 x double>*
3215e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* %s
3216e1f67a8bSThomas Lively  ret <2 x double> %v
3217e1f67a8bSThomas Lively}
3218e1f67a8bSThomas Lively
321999d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_from_numeric_address() {
322051cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_from_numeric_address:
322151cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_from_numeric_address () -> (v128)
322251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
322351cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
3224a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat 32
322551cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
322699d3dd28SThomas Lively  %s = inttoptr i32 32 to double*
322799d3dd28SThomas Lively  %e = load double, double* %s
322899d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
322999d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
323099d3dd28SThomas Lively  ret <2 x double> %v2
323199d3dd28SThomas Lively}
323299d3dd28SThomas Lively
3233*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_from_numeric_address() {
3234*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_from_numeric_address:
3235*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_from_numeric_address () -> (v128)
3236*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3237*fec47492SThomas Lively; CHECK-NEXT:    i32.const 32
3238*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3239*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3240*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3241*fec47492SThomas Lively  %s = inttoptr i32 32 to <2 x float>*
3242*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* %s
3243*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3244*fec47492SThomas Lively  ret <2 x double> %v
3245*fec47492SThomas Lively}
3246*fec47492SThomas Lively
3247e1f67a8bSThomas Lively@gv_v2f64 = global <2 x double> <double 42., double 42.>
3248e1f67a8bSThomas Livelydefine <2 x double> @load_v2f64_from_global_address() {
324951cd326fSThomas Lively; CHECK-LABEL: load_v2f64_from_global_address:
325051cd326fSThomas Lively; CHECK:         .functype load_v2f64_from_global_address () -> (v128)
325151cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
325251cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
325351cd326fSThomas Lively; CHECK-NEXT:    v128.load gv_v2f64
325451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3255e1f67a8bSThomas Lively  %v = load <2 x double>, <2 x double>* @gv_v2f64
3256e1f67a8bSThomas Lively  ret <2 x double> %v
3257e1f67a8bSThomas Lively}
3258e1f67a8bSThomas Lively
325999d3dd28SThomas Lively@gv_f64 = global double 42.
326099d3dd28SThomas Livelydefine <2 x double> @load_splat_v2f64_from_global_address() {
326151cd326fSThomas Lively; CHECK-LABEL: load_splat_v2f64_from_global_address:
326251cd326fSThomas Lively; CHECK:         .functype load_splat_v2f64_from_global_address () -> (v128)
326351cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
326451cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
3265a781a706SThomas Lively; CHECK-NEXT:    v128.load64_splat gv_f64
326651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
326799d3dd28SThomas Lively  %e = load double, double* @gv_f64
326899d3dd28SThomas Lively  %v1 = insertelement <2 x double> undef, double %e, i32 0
326999d3dd28SThomas Lively  %v2 = shufflevector <2 x double> %v1, <2 x double> undef, <2 x i32> zeroinitializer
327099d3dd28SThomas Lively  ret <2 x double> %v2
327199d3dd28SThomas Lively}
327299d3dd28SThomas Lively
3273*fec47492SThomas Lively@gv_v2f32 = global <2 x float> <float 42., float 42.>
3274*fec47492SThomas Livelydefine <2 x double> @load_promote_v2f64_from_global_address() {
3275*fec47492SThomas Lively; CHECK-LABEL: load_promote_v2f64_from_global_address:
3276*fec47492SThomas Lively; CHECK:         .functype load_promote_v2f64_from_global_address () -> (v128)
3277*fec47492SThomas Lively; CHECK-NEXT:  # %bb.0:
3278*fec47492SThomas Lively; CHECK-NEXT:    i32.const gv_v2f32
3279*fec47492SThomas Lively; CHECK-NEXT:    v128.load64_zero 0
3280*fec47492SThomas Lively; CHECK-NEXT:    f64x2.promote_low_f32x4
3281*fec47492SThomas Lively; CHECK-NEXT:    # fallthrough-return
3282*fec47492SThomas Lively  %e = load <2 x float>, <2 x float>* @gv_v2f32
3283*fec47492SThomas Lively  %v = fpext <2 x float> %e to <2 x double>
3284*fec47492SThomas Lively  ret <2 x double> %v
3285*fec47492SThomas Lively}
3286*fec47492SThomas Lively
3287e1f67a8bSThomas Livelydefine void @store_v2f64(<2 x double> %v, <2 x double>* %p) {
328851cd326fSThomas Lively; CHECK-LABEL: store_v2f64:
328951cd326fSThomas Lively; CHECK:         .functype store_v2f64 (v128, i32) -> ()
329051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
329151cd326fSThomas Lively; CHECK-NEXT:    local.get 1
329251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
329351cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
329451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3295e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %p
3296e1f67a8bSThomas Lively  ret void
3297e1f67a8bSThomas Lively}
3298e1f67a8bSThomas Lively
3299e1f67a8bSThomas Livelydefine void @store_v2f64_with_folded_offset(<2 x double> %v, <2 x double>* %p) {
330051cd326fSThomas Lively; CHECK-LABEL: store_v2f64_with_folded_offset:
330151cd326fSThomas Lively; CHECK:         .functype store_v2f64_with_folded_offset (v128, i32) -> ()
330251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
330351cd326fSThomas Lively; CHECK-NEXT:    local.get 1
330451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
330551cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
330651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3307e1f67a8bSThomas Lively  %q = ptrtoint <2 x double>* %p to i32
3308e1f67a8bSThomas Lively  %r = add nuw i32 %q, 16
3309e1f67a8bSThomas Lively  %s = inttoptr i32 %r to <2 x double>*
3310e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3311e1f67a8bSThomas Lively  ret void
3312e1f67a8bSThomas Lively}
3313e1f67a8bSThomas Lively
3314e1f67a8bSThomas Livelydefine void @store_v2f64_with_folded_gep_offset(<2 x double> %v, <2 x double>* %p) {
331551cd326fSThomas Lively; CHECK-LABEL: store_v2f64_with_folded_gep_offset:
331651cd326fSThomas Lively; CHECK:         .functype store_v2f64_with_folded_gep_offset (v128, i32) -> ()
331751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
331851cd326fSThomas Lively; CHECK-NEXT:    local.get 1
331951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
332051cd326fSThomas Lively; CHECK-NEXT:    v128.store 16
332151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3322e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x double>, <2 x double>* %p, i32 1
3323e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3324e1f67a8bSThomas Lively  ret void
3325e1f67a8bSThomas Lively}
3326e1f67a8bSThomas Lively
3327e1f67a8bSThomas Livelydefine void @store_v2f64_with_unfolded_gep_negative_offset(<2 x double> %v, <2 x double>* %p) {
332851cd326fSThomas Lively; CHECK-LABEL: store_v2f64_with_unfolded_gep_negative_offset:
332951cd326fSThomas Lively; CHECK:         .functype store_v2f64_with_unfolded_gep_negative_offset (v128, i32) -> ()
333051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
333151cd326fSThomas Lively; CHECK-NEXT:    local.get 1
333251cd326fSThomas Lively; CHECK-NEXT:    i32.const -16
333351cd326fSThomas Lively; CHECK-NEXT:    i32.add
333451cd326fSThomas Lively; CHECK-NEXT:    local.get 0
333551cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
333651cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3337e1f67a8bSThomas Lively  %s = getelementptr inbounds <2 x double>, <2 x double>* %p, i32 -1
3338e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3339e1f67a8bSThomas Lively  ret void
3340e1f67a8bSThomas Lively}
3341e1f67a8bSThomas Lively
3342e1f67a8bSThomas Livelydefine void @store_v2f64_with_unfolded_offset(<2 x double> %v, <2 x double>* %p) {
334351cd326fSThomas Lively; CHECK-LABEL: store_v2f64_with_unfolded_offset:
334451cd326fSThomas Lively; CHECK:         .functype store_v2f64_with_unfolded_offset (v128, i32) -> ()
334551cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
334651cd326fSThomas Lively; CHECK-NEXT:    local.get 1
3347a4594592SThomas Lively; CHECK-NEXT:    i32.const 16
334851cd326fSThomas Lively; CHECK-NEXT:    i32.add
334951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
335051cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
335151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3352a4594592SThomas Lively  %q = ptrtoint <2 x double>* %p to i32
3353a4594592SThomas Lively  %r = add nsw i32 %q, 16
3354a4594592SThomas Lively  %s = inttoptr i32 %r to <2 x double>*
3355e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3356e1f67a8bSThomas Lively  ret void
3357e1f67a8bSThomas Lively}
3358e1f67a8bSThomas Lively
3359e1f67a8bSThomas Livelydefine void @store_v2f64_with_unfolded_gep_offset(<2 x double> %v, <2 x double>* %p) {
336051cd326fSThomas Lively; CHECK-LABEL: store_v2f64_with_unfolded_gep_offset:
336151cd326fSThomas Lively; CHECK:         .functype store_v2f64_with_unfolded_gep_offset (v128, i32) -> ()
336251cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
336351cd326fSThomas Lively; CHECK-NEXT:    local.get 1
336451cd326fSThomas Lively; CHECK-NEXT:    i32.const 16
336551cd326fSThomas Lively; CHECK-NEXT:    i32.add
336651cd326fSThomas Lively; CHECK-NEXT:    local.get 0
336751cd326fSThomas Lively; CHECK-NEXT:    v128.store 0
336851cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3369e1f67a8bSThomas Lively  %s = getelementptr <2 x double>, <2 x double>* %p, i32 1
3370e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3371e1f67a8bSThomas Lively  ret void
3372e1f67a8bSThomas Lively}
3373e1f67a8bSThomas Lively
3374e1f67a8bSThomas Livelydefine void @store_v2f64_to_numeric_address(<2 x double> %v) {
337551cd326fSThomas Lively; CHECK-LABEL: store_v2f64_to_numeric_address:
337651cd326fSThomas Lively; CHECK:         .functype store_v2f64_to_numeric_address (v128) -> ()
337751cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
337851cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
337951cd326fSThomas Lively; CHECK-NEXT:    local.get 0
338051cd326fSThomas Lively; CHECK-NEXT:    v128.store 32
338151cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3382e1f67a8bSThomas Lively  %s = inttoptr i32 32 to <2 x double>*
3383e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* %s
3384e1f67a8bSThomas Lively  ret void
3385e1f67a8bSThomas Lively}
3386e1f67a8bSThomas Lively
3387e1f67a8bSThomas Livelydefine void @store_v2f64_to_global_address(<2 x double> %v) {
338851cd326fSThomas Lively; CHECK-LABEL: store_v2f64_to_global_address:
338951cd326fSThomas Lively; CHECK:         .functype store_v2f64_to_global_address (v128) -> ()
339051cd326fSThomas Lively; CHECK-NEXT:  # %bb.0:
339151cd326fSThomas Lively; CHECK-NEXT:    i32.const 0
339251cd326fSThomas Lively; CHECK-NEXT:    local.get 0
339351cd326fSThomas Lively; CHECK-NEXT:    v128.store gv_v2f64
339451cd326fSThomas Lively; CHECK-NEXT:    # fallthrough-return
3395e1f67a8bSThomas Lively  store <2 x double> %v , <2 x double>* @gv_v2f64
3396e1f67a8bSThomas Lively  ret void
3397e1f67a8bSThomas Lively}
3398