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