1*8638c897SThomas Lively; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128,+sign-ext | FileCheck %s --check-prefixes CHECK,SIMD128 264a39a1cSThomas Lively; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s --check-prefixes CHECK,NO-SIMD128 3a0fd9c3eSHeejin Ahn 4a0fd9c3eSHeejin Ahn; Test that basic SIMD128 vector manipulation operations assemble as expected. 5a0fd9c3eSHeejin Ahn 6a0fd9c3eSHeejin Ahntarget triple = "wasm32-unknown-unknown" 7a0fd9c3eSHeejin Ahn 8a0fd9c3eSHeejin Ahn; ============================================================================== 9a0fd9c3eSHeejin Ahn; 16 x i8 10a0fd9c3eSHeejin Ahn; ============================================================================== 1122442924SThomas Lively; CHECK-LABEL: const_v16i8: 1222442924SThomas Lively; NO-SIMD128-NOT: i8x16 1349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v16i8 () -> (v128){{$}} 1466f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 1522442924SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 1666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 1722442924SThomas Livelydefine <16 x i8> @const_v16i8() { 1822442924SThomas Lively ret <16 x i8> <i8 00, i8 01, i8 02, i8 03, i8 04, i8 05, i8 06, i8 07, 1922442924SThomas Lively i8 08, i8 09, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15> 2022442924SThomas Lively} 2122442924SThomas Lively 224ec8bca1SDerek Schuff; CHECK-LABEL: splat_v16i8: 234ec8bca1SDerek Schuff; NO-SIMD128-NOT: i8x16 2449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v16i8 (i32) -> (v128){{$}} 2566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.splat $push[[R:[0-9]+]]=, $0{{$}} 2666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 274ec8bca1SDerek Schuffdefine <16 x i8> @splat_v16i8(i8 %x) { 284ec8bca1SDerek Schuff %v = insertelement <16 x i8> undef, i8 %x, i32 0 294ec8bca1SDerek Schuff %res = shufflevector <16 x i8> %v, <16 x i8> undef, 304ec8bca1SDerek Schuff <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, 314ec8bca1SDerek Schuff i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 324ec8bca1SDerek Schuff ret <16 x i8> %res 334ec8bca1SDerek Schuff} 344ec8bca1SDerek Schuff 351b55b2beSThomas Lively; CHECK-LABEL: const_splat_v16i8: 36b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42{{$}} 37da26b84bSThomas Livelydefine <16 x i8> @const_splat_v16i8() { 38da26b84bSThomas Lively ret <16 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, 39da26b84bSThomas Lively i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42> 40da26b84bSThomas Lively} 41da26b84bSThomas Lively 42c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8_s: 43a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16 4449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8_s (v128) -> (i32){{$}} 4566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_s $push[[R:[0-9]+]]=, $0, 13{{$}} 4666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 47a0fd9c3eSHeejin Ahndefine i32 @extract_v16i8_s(<16 x i8> %v) { 48a0fd9c3eSHeejin Ahn %elem = extractelement <16 x i8> %v, i8 13 49a0fd9c3eSHeejin Ahn %a = sext i8 %elem to i32 50a0fd9c3eSHeejin Ahn ret i32 %a 51a0fd9c3eSHeejin Ahn} 52a0fd9c3eSHeejin Ahn 53fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8_s: 54fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16 5549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8_s (v128, i32) -> (i32){{$}} 56275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer 57fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16 58fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]] 596a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]] 60fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0 61fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15 62fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]] 63fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]] 64fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_s $push[[R:[0-9]+]]=, 0($pop[[L6]]) 65fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]] 66fb84fd7cSThomas Livelydefine i32 @extract_var_v16i8_s(<16 x i8> %v, i32 %i) { 67fb84fd7cSThomas Lively %elem = extractelement <16 x i8> %v, i32 %i 68fb84fd7cSThomas Lively %a = sext i8 %elem to i32 69fb84fd7cSThomas Lively ret i32 %a 70fb84fd7cSThomas Lively} 71fb84fd7cSThomas Lively 7211a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8_s: 7311a332d0SThomas Lively; NO-SIMD128-NOT: i8x16 7449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8_s (v128) -> (i32){{$}} 7511a332d0SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_s $push[[R:[0-9]+]]=, $0, 0{{$}} 7611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 7711a332d0SThomas Livelydefine i32 @extract_undef_v16i8_s(<16 x i8> %v) { 7811a332d0SThomas Lively %elem = extractelement <16 x i8> %v, i8 undef 7911a332d0SThomas Lively %a = sext i8 %elem to i32 8011a332d0SThomas Lively ret i32 %a 8111a332d0SThomas Lively} 8211a332d0SThomas Lively 83c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8_u: 84a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16 8549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8_u (v128) -> (i32){{$}} 8666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 13{{$}} 8766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 88a0fd9c3eSHeejin Ahndefine i32 @extract_v16i8_u(<16 x i8> %v) { 89a0fd9c3eSHeejin Ahn %elem = extractelement <16 x i8> %v, i8 13 90a0fd9c3eSHeejin Ahn %a = zext i8 %elem to i32 91a0fd9c3eSHeejin Ahn ret i32 %a 92a0fd9c3eSHeejin Ahn} 93a0fd9c3eSHeejin Ahn 94fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8_u: 95fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16 9649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8_u (v128, i32) -> (i32){{$}} 97275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 98fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 99fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 1006a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 101fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 102fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}} 103fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 104fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]]{{$}} 105fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_u $push[[R:[0-9]+]]=, 0($pop[[L6]]){{$}} 106fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 107fb84fd7cSThomas Livelydefine i32 @extract_var_v16i8_u(<16 x i8> %v, i32 %i) { 108fb84fd7cSThomas Lively %elem = extractelement <16 x i8> %v, i32 %i 109fb84fd7cSThomas Lively %a = zext i8 %elem to i32 110fb84fd7cSThomas Lively ret i32 %a 111fb84fd7cSThomas Lively} 112fb84fd7cSThomas Lively 11311a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8_u: 11411a332d0SThomas Lively; NO-SIMD128-NOT: i8x16 11549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8_u (v128) -> (i32){{$}} 11611a332d0SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}} 11711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 11811a332d0SThomas Livelydefine i32 @extract_undef_v16i8_u(<16 x i8> %v) { 11911a332d0SThomas Lively %elem = extractelement <16 x i8> %v, i8 undef 12011a332d0SThomas Lively %a = zext i8 %elem to i32 12111a332d0SThomas Lively ret i32 %a 12211a332d0SThomas Lively} 12311a332d0SThomas Lively 124c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8: 125a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16 12649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8 (v128) -> (i32){{$}} 1270906dca4SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 13{{$}} 12866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 129a0fd9c3eSHeejin Ahndefine i8 @extract_v16i8(<16 x i8> %v) { 130a0fd9c3eSHeejin Ahn %elem = extractelement <16 x i8> %v, i8 13 131a0fd9c3eSHeejin Ahn ret i8 %elem 132a0fd9c3eSHeejin Ahn} 133a0fd9c3eSHeejin Ahn 134fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8: 135fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16 13649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8 (v128, i32) -> (i32){{$}} 137275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 138fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 139fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 1406a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 141fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 142fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}} 143fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 144fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]]{{$}} 145fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_u $push[[R:[0-9]+]]=, 0($pop[[L6]]){{$}} 146fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 147fb84fd7cSThomas Livelydefine i8 @extract_var_v16i8(<16 x i8> %v, i32 %i) { 148fb84fd7cSThomas Lively %elem = extractelement <16 x i8> %v, i32 %i 149fb84fd7cSThomas Lively ret i8 %elem 150fb84fd7cSThomas Lively} 151fb84fd7cSThomas Lively 15211a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8: 15311a332d0SThomas Lively; NO-SIMD128-NOT: i8x16 15449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8 (v128) -> (i32){{$}} 1550906dca4SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}} 15611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 15711a332d0SThomas Livelydefine i8 @extract_undef_v16i8(<16 x i8> %v) { 15811a332d0SThomas Lively %elem = extractelement <16 x i8> %v, i8 undef 15911a332d0SThomas Lively ret i8 %elem 16011a332d0SThomas Lively} 16111a332d0SThomas Lively 16282812fb9SDerek Schuff; CHECK-LABEL: replace_v16i8: 16382812fb9SDerek Schuff; NO-SIMD128-NOT: i8x16 16449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v16i8 (v128, i32) -> (v128){{$}} 16566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $0, 11, $1{{$}} 16666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 16782812fb9SDerek Schuffdefine <16 x i8> @replace_v16i8(<16 x i8> %v, i8 %x) { 16882812fb9SDerek Schuff %res = insertelement <16 x i8> %v, i8 %x, i32 11 16982812fb9SDerek Schuff ret <16 x i8> %res 17082812fb9SDerek Schuff} 17182812fb9SDerek Schuff 172fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v16i8: 173fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16 17449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v16i8 (v128, i32, i32) -> (v128){{$}} 175275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 176fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 177fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 1786a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 179fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 180fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}} 181fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 182fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $3, $pop[[L5]]{{$}} 183fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store8 0($pop[[L6]]), $2{{$}} 184fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 185fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 186fb84fd7cSThomas Livelydefine <16 x i8> @replace_var_v16i8(<16 x i8> %v, i32 %i, i8 %x) { 187fb84fd7cSThomas Lively %res = insertelement <16 x i8> %v, i8 %x, i32 %i 188fb84fd7cSThomas Lively ret <16 x i8> %res 189fb84fd7cSThomas Lively} 190fb84fd7cSThomas Lively 19185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v16i8: 19211a332d0SThomas Lively; NO-SIMD128-NOT: i8x16 19385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v16i8 (v128, i32) -> (v128){{$}} 19411a332d0SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 19511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 19685a2146cSSanjay Pateldefine <16 x i8> @replace_zero_v16i8(<16 x i8> %v, i8 %x) { 19785a2146cSSanjay Patel %res = insertelement <16 x i8> %v, i8 %x, i32 0 19811a332d0SThomas Lively ret <16 x i8> %res 19911a332d0SThomas Lively} 20011a332d0SThomas Lively 201a0d25815SThomas Lively; CHECK-LABEL: shuffle_v16i8: 202a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 20349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v16i8 (v128, v128) -> (v128){{$}} 204a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 205a3937b23SThomas Lively; SIMD128-SAME: 0, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 29, 14, 31{{$}} 20666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 207a0d25815SThomas Livelydefine <16 x i8> @shuffle_v16i8(<16 x i8> %x, <16 x i8> %y) { 208a0d25815SThomas Lively %res = shufflevector <16 x i8> %x, <16 x i8> %y, 209a0d25815SThomas Lively <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, 210a0d25815SThomas Lively i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31> 211a0d25815SThomas Lively ret <16 x i8> %res 212a0d25815SThomas Lively} 213a0d25815SThomas Lively 21411a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v16i8: 215a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 21649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v16i8 (v128, v128) -> (v128){{$}} 217a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 21811a332d0SThomas Lively; SIMD128-SAME: 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 21911a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 22011a332d0SThomas Livelydefine <16 x i8> @shuffle_undef_v16i8(<16 x i8> %x, <16 x i8> %y) { 22111a332d0SThomas Lively %res = shufflevector <16 x i8> %x, <16 x i8> %y, 22211a332d0SThomas Lively <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, 22311a332d0SThomas Lively i32 undef, i32 undef, i32 undef, i32 undef, 22411a332d0SThomas Lively i32 undef, i32 undef, i32 undef, i32 undef, 22511a332d0SThomas Lively i32 undef, i32 undef, i32 undef, i32 undef> 22611a332d0SThomas Lively ret <16 x i8> %res 22711a332d0SThomas Lively} 22811a332d0SThomas Lively 2292ee686daSThomas Lively; CHECK-LABEL: build_v16i8: 2302ee686daSThomas Lively; NO-SIMD128-NOT: i8x16 23149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> (v128){{$}} 23266f3dc03SThomas Lively; SIMD128-NEXT: i8x16.splat $push[[L0:[0-9]+]]=, $0{{$}} 23366f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 23466f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}} 23566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L3:[0-9]+]]=, $pop[[L2]], 3, $3{{$}} 23666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L4:[0-9]+]]=, $pop[[L3]], 4, $4{{$}} 23766f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L5:[0-9]+]]=, $pop[[L4]], 5, $5{{$}} 23866f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L6:[0-9]+]]=, $pop[[L5]], 6, $6{{$}} 23966f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L7:[0-9]+]]=, $pop[[L6]], 7, $7{{$}} 24066f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L8:[0-9]+]]=, $pop[[L7]], 8, $8{{$}} 24166f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L9:[0-9]+]]=, $pop[[L8]], 9, $9{{$}} 24266f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L10:[0-9]+]]=, $pop[[L9]], 10, $10{{$}} 24366f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L11:[0-9]+]]=, $pop[[L10]], 11, $11{{$}} 24466f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L12:[0-9]+]]=, $pop[[L11]], 12, $12{{$}} 24566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L13:[0-9]+]]=, $pop[[L12]], 13, $13{{$}} 24666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L14:[0-9]+]]=, $pop[[L13]], 14, $14{{$}} 24766f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $pop[[L14]], 15, $15{{$}} 24866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 2492ee686daSThomas Livelydefine <16 x i8> @build_v16i8(i8 %x0, i8 %x1, i8 %x2, i8 %x3, 2502ee686daSThomas Lively i8 %x4, i8 %x5, i8 %x6, i8 %x7, 2512ee686daSThomas Lively i8 %x8, i8 %x9, i8 %x10, i8 %x11, 2522ee686daSThomas Lively i8 %x12, i8 %x13, i8 %x14, i8 %x15) { 2532ee686daSThomas Lively %t0 = insertelement <16 x i8> undef, i8 %x0, i32 0 2542ee686daSThomas Lively %t1 = insertelement <16 x i8> %t0, i8 %x1, i32 1 2552ee686daSThomas Lively %t2 = insertelement <16 x i8> %t1, i8 %x2, i32 2 2562ee686daSThomas Lively %t3 = insertelement <16 x i8> %t2, i8 %x3, i32 3 2572ee686daSThomas Lively %t4 = insertelement <16 x i8> %t3, i8 %x4, i32 4 2582ee686daSThomas Lively %t5 = insertelement <16 x i8> %t4, i8 %x5, i32 5 2592ee686daSThomas Lively %t6 = insertelement <16 x i8> %t5, i8 %x6, i32 6 2602ee686daSThomas Lively %t7 = insertelement <16 x i8> %t6, i8 %x7, i32 7 2612ee686daSThomas Lively %t8 = insertelement <16 x i8> %t7, i8 %x8, i32 8 2622ee686daSThomas Lively %t9 = insertelement <16 x i8> %t8, i8 %x9, i32 9 2632ee686daSThomas Lively %t10 = insertelement <16 x i8> %t9, i8 %x10, i32 10 2642ee686daSThomas Lively %t11 = insertelement <16 x i8> %t10, i8 %x11, i32 11 2652ee686daSThomas Lively %t12 = insertelement <16 x i8> %t11, i8 %x12, i32 12 2662ee686daSThomas Lively %t13 = insertelement <16 x i8> %t12, i8 %x13, i32 13 2672ee686daSThomas Lively %t14 = insertelement <16 x i8> %t13, i8 %x14, i32 14 2682ee686daSThomas Lively %res = insertelement <16 x i8> %t14, i8 %x15, i32 15 2692ee686daSThomas Lively ret <16 x i8> %res 2702ee686daSThomas Lively} 2712ee686daSThomas Lively 272a0fd9c3eSHeejin Ahn; ============================================================================== 273a0fd9c3eSHeejin Ahn; 8 x i16 274a0fd9c3eSHeejin Ahn; ============================================================================== 27522442924SThomas Lively; CHECK-LABEL: const_v8i16: 27622442924SThomas Lively; NO-SIMD128-NOT: i16x8 27749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v8i16 () -> (v128){{$}} 27866f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 256, 770, 1284, 1798, 2312, 2826, 3340, 3854{{$}} 27966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 28022442924SThomas Livelydefine <8 x i16> @const_v8i16() { 28122442924SThomas Lively ret <8 x i16> <i16 256, i16 770, i16 1284, i16 1798, 28222442924SThomas Lively i16 2312, i16 2826, i16 3340, i16 3854> 28322442924SThomas Lively} 28422442924SThomas Lively 2854ec8bca1SDerek Schuff; CHECK-LABEL: splat_v8i16: 2864ec8bca1SDerek Schuff; NO-SIMD128-NOT: i16x8 28749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v8i16 (i32) -> (v128){{$}} 28866f3dc03SThomas Lively; SIMD128-NEXT: i16x8.splat $push[[R:[0-9]+]]=, $0{{$}} 28966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 2904ec8bca1SDerek Schuffdefine <8 x i16> @splat_v8i16(i16 %x) { 2914ec8bca1SDerek Schuff %v = insertelement <8 x i16> undef, i16 %x, i32 0 2924ec8bca1SDerek Schuff %res = shufflevector <8 x i16> %v, <8 x i16> undef, 2934ec8bca1SDerek Schuff <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 2944ec8bca1SDerek Schuff ret <8 x i16> %res 2954ec8bca1SDerek Schuff} 2964ec8bca1SDerek Schuff 297cfab8b4bSThomas Lively; CHECK-LABEL: const_splat_v8i16: 298b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42, 42, 42, 42, 42{{$}} 299da26b84bSThomas Livelydefine <8 x i16> @const_splat_v8i16() { 300da26b84bSThomas Lively ret <8 x i16> <i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42> 301da26b84bSThomas Lively} 302da26b84bSThomas Lively 303c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16_s: 304a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8 30549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16_s (v128) -> (i32){{$}} 30666f3dc03SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_s $push[[R:[0-9]+]]=, $0, 5{{$}} 30766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 308a0fd9c3eSHeejin Ahndefine i32 @extract_v8i16_s(<8 x i16> %v) { 309a0fd9c3eSHeejin Ahn %elem = extractelement <8 x i16> %v, i16 5 310a0fd9c3eSHeejin Ahn %a = sext i16 %elem to i32 311a0fd9c3eSHeejin Ahn ret i32 %a 312a0fd9c3eSHeejin Ahn} 313a0fd9c3eSHeejin Ahn 314fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16_s: 315fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8 31649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16_s (v128, i32) -> (i32){{$}} 317275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 318fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 319fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 3206a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 321fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 322fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}} 323fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 324fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}} 325fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 326fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}} 327fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_s $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}} 328fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 329fb84fd7cSThomas Livelydefine i32 @extract_var_v8i16_s(<8 x i16> %v, i32 %i) { 330fb84fd7cSThomas Lively %elem = extractelement <8 x i16> %v, i32 %i 331fb84fd7cSThomas Lively %a = sext i16 %elem to i32 332fb84fd7cSThomas Lively ret i32 %a 333fb84fd7cSThomas Lively} 334fb84fd7cSThomas Lively 33511a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16_s: 33611a332d0SThomas Lively; NO-SIMD128-NOT: i16x8 33749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16_s (v128) -> (i32){{$}} 33811a332d0SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_s $push[[R:[0-9]+]]=, $0, 0{{$}} 33911a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 34011a332d0SThomas Livelydefine i32 @extract_undef_v8i16_s(<8 x i16> %v) { 34111a332d0SThomas Lively %elem = extractelement <8 x i16> %v, i16 undef 34211a332d0SThomas Lively %a = sext i16 %elem to i32 34311a332d0SThomas Lively ret i32 %a 34411a332d0SThomas Lively} 34511a332d0SThomas Lively 346c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16_u: 347a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8 34849482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16_u (v128) -> (i32){{$}} 34966f3dc03SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 5{{$}} 35066f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 351a0fd9c3eSHeejin Ahndefine i32 @extract_v8i16_u(<8 x i16> %v) { 352a0fd9c3eSHeejin Ahn %elem = extractelement <8 x i16> %v, i16 5 353a0fd9c3eSHeejin Ahn %a = zext i16 %elem to i32 354a0fd9c3eSHeejin Ahn ret i32 %a 355a0fd9c3eSHeejin Ahn} 356a0fd9c3eSHeejin Ahn 357fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16_u: 358fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8 35949482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16_u (v128, i32) -> (i32){{$}} 360275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 361fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 362fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 3636a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 364fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 365fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}} 366fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 367fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}} 368fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 369fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}} 370fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_u $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}} 371fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 372fb84fd7cSThomas Livelydefine i32 @extract_var_v8i16_u(<8 x i16> %v, i32 %i) { 373fb84fd7cSThomas Lively %elem = extractelement <8 x i16> %v, i32 %i 374fb84fd7cSThomas Lively %a = zext i16 %elem to i32 375fb84fd7cSThomas Lively ret i32 %a 376fb84fd7cSThomas Lively} 377fb84fd7cSThomas Lively 37811a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16_u: 37911a332d0SThomas Lively; NO-SIMD128-NOT: i16x8 38049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16_u (v128) -> (i32){{$}} 38111a332d0SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}} 38211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 38311a332d0SThomas Livelydefine i32 @extract_undef_v8i16_u(<8 x i16> %v) { 38411a332d0SThomas Lively %elem = extractelement <8 x i16> %v, i16 undef 38511a332d0SThomas Lively %a = zext i16 %elem to i32 38611a332d0SThomas Lively ret i32 %a 38711a332d0SThomas Lively} 38811a332d0SThomas Lively 389c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16: 390a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8 39149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16 (v128) -> (i32){{$}} 3920906dca4SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 5{{$}} 39366f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 394a0fd9c3eSHeejin Ahndefine i16 @extract_v8i16(<8 x i16> %v) { 395a0fd9c3eSHeejin Ahn %elem = extractelement <8 x i16> %v, i16 5 396a0fd9c3eSHeejin Ahn ret i16 %elem 397a0fd9c3eSHeejin Ahn} 398a0fd9c3eSHeejin Ahn 399fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16: 400fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8 40149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16 (v128, i32) -> (i32){{$}} 402275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 403fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 404fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 4056a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 406fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 407fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}} 408fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 409fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}} 410fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 411fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}} 412fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_u $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}} 413fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 414fb84fd7cSThomas Livelydefine i16 @extract_var_v8i16(<8 x i16> %v, i32 %i) { 415fb84fd7cSThomas Lively %elem = extractelement <8 x i16> %v, i32 %i 416fb84fd7cSThomas Lively ret i16 %elem 417fb84fd7cSThomas Lively} 418fb84fd7cSThomas Lively 41911a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16: 42011a332d0SThomas Lively; NO-SIMD128-NOT: i16x8 42149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16 (v128) -> (i32){{$}} 4220906dca4SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}} 42311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 42411a332d0SThomas Livelydefine i16 @extract_undef_v8i16(<8 x i16> %v) { 42511a332d0SThomas Lively %elem = extractelement <8 x i16> %v, i16 undef 42611a332d0SThomas Lively ret i16 %elem 42711a332d0SThomas Lively} 42811a332d0SThomas Lively 42982812fb9SDerek Schuff; CHECK-LABEL: replace_v8i16: 43082812fb9SDerek Schuff; NO-SIMD128-NOT: i16x8 43149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v8i16 (v128, i32) -> (v128){{$}} 43266f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $0, 7, $1{{$}} 43366f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 43482812fb9SDerek Schuffdefine <8 x i16> @replace_v8i16(<8 x i16> %v, i16 %x) { 43582812fb9SDerek Schuff %res = insertelement <8 x i16> %v, i16 %x, i32 7 43682812fb9SDerek Schuff ret <8 x i16> %res 43782812fb9SDerek Schuff} 43882812fb9SDerek Schuff 439fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v8i16: 440fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8 44149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v8i16 (v128, i32, i32) -> (v128){{$}} 442275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 443fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 444fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 4456a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 446fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 447fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}} 448fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 449fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}} 450fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 451fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $3, $pop[[L7]]{{$}} 452fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store16 0($pop[[L8]]), $2{{$}} 453fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 454fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 455fb84fd7cSThomas Livelydefine <8 x i16> @replace_var_v8i16(<8 x i16> %v, i32 %i, i16 %x) { 456fb84fd7cSThomas Lively %res = insertelement <8 x i16> %v, i16 %x, i32 %i 457fb84fd7cSThomas Lively ret <8 x i16> %res 458fb84fd7cSThomas Lively} 459fb84fd7cSThomas Lively 46085a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v8i16: 46111a332d0SThomas Lively; NO-SIMD128-NOT: i16x8 46285a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v8i16 (v128, i32) -> (v128){{$}} 46311a332d0SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 46411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 46585a2146cSSanjay Pateldefine <8 x i16> @replace_zero_v8i16(<8 x i16> %v, i16 %x) { 46685a2146cSSanjay Patel %res = insertelement <8 x i16> %v, i16 %x, i32 0 46711a332d0SThomas Lively ret <8 x i16> %res 46811a332d0SThomas Lively} 46911a332d0SThomas Lively 470a0d25815SThomas Lively; CHECK-LABEL: shuffle_v8i16: 471a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 47249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v8i16 (v128, v128) -> (v128){{$}} 473a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 474a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 18, 19, 4, 5, 22, 23, 8, 9, 26, 27, 12, 13, 30, 31{{$}} 47566f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 476a0d25815SThomas Livelydefine <8 x i16> @shuffle_v8i16(<8 x i16> %x, <8 x i16> %y) { 477a0d25815SThomas Lively %res = shufflevector <8 x i16> %x, <8 x i16> %y, 478a0d25815SThomas Lively <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15> 479a0d25815SThomas Lively ret <8 x i16> %res 480a0d25815SThomas Lively} 481a0d25815SThomas Lively 48211a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v8i16: 483a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 48449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v8i16 (v128, v128) -> (v128){{$}} 485a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 48611a332d0SThomas Lively; SIMD128-SAME: 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 48711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 48811a332d0SThomas Livelydefine <8 x i16> @shuffle_undef_v8i16(<8 x i16> %x, <8 x i16> %y) { 48911a332d0SThomas Lively %res = shufflevector <8 x i16> %x, <8 x i16> %y, 49011a332d0SThomas Lively <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, 49111a332d0SThomas Lively i32 undef, i32 undef, i32 undef, i32 undef> 49211a332d0SThomas Lively ret <8 x i16> %res 49311a332d0SThomas Lively} 49411a332d0SThomas Lively 4952ee686daSThomas Lively; CHECK-LABEL: build_v8i16: 4962ee686daSThomas Lively; NO-SIMD128-NOT: i16x8 49749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32) -> (v128){{$}} 49866f3dc03SThomas Lively; SIMD128-NEXT: i16x8.splat $push[[L0:[0-9]+]]=, $0{{$}} 49966f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 50066f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}} 50166f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L3:[0-9]+]]=, $pop[[L2]], 3, $3{{$}} 50266f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L4:[0-9]+]]=, $pop[[L3]], 4, $4{{$}} 50366f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L5:[0-9]+]]=, $pop[[L4]], 5, $5{{$}} 50466f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L6:[0-9]+]]=, $pop[[L5]], 6, $6{{$}} 50566f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $pop[[L6]], 7, $7{{$}} 50666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 5072ee686daSThomas Livelydefine <8 x i16> @build_v8i16(i16 %x0, i16 %x1, i16 %x2, i16 %x3, 5082ee686daSThomas Lively i16 %x4, i16 %x5, i16 %x6, i16 %x7) { 5092ee686daSThomas Lively %t0 = insertelement <8 x i16> undef, i16 %x0, i32 0 5102ee686daSThomas Lively %t1 = insertelement <8 x i16> %t0, i16 %x1, i32 1 5112ee686daSThomas Lively %t2 = insertelement <8 x i16> %t1, i16 %x2, i32 2 5122ee686daSThomas Lively %t3 = insertelement <8 x i16> %t2, i16 %x3, i32 3 5132ee686daSThomas Lively %t4 = insertelement <8 x i16> %t3, i16 %x4, i32 4 5142ee686daSThomas Lively %t5 = insertelement <8 x i16> %t4, i16 %x5, i32 5 5152ee686daSThomas Lively %t6 = insertelement <8 x i16> %t5, i16 %x6, i32 6 5162ee686daSThomas Lively %res = insertelement <8 x i16> %t6, i16 %x7, i32 7 5172ee686daSThomas Lively ret <8 x i16> %res 5182ee686daSThomas Lively} 5192ee686daSThomas Lively 520a0fd9c3eSHeejin Ahn; ============================================================================== 521a0fd9c3eSHeejin Ahn; 4 x i32 522a0fd9c3eSHeejin Ahn; ============================================================================== 52322442924SThomas Lively; CHECK-LABEL: const_v4i32: 52422442924SThomas Lively; NO-SIMD128-NOT: i32x4 52549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v4i32 () -> (v128){{$}} 52666f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 50462976, 117835012, 185207048, 252579084{{$}} 52766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 52822442924SThomas Livelydefine <4 x i32> @const_v4i32() { 52922442924SThomas Lively ret <4 x i32> <i32 50462976, i32 117835012, i32 185207048, i32 252579084> 53022442924SThomas Lively} 53122442924SThomas Lively 5324ec8bca1SDerek Schuff; CHECK-LABEL: splat_v4i32: 5334ec8bca1SDerek Schuff; NO-SIMD128-NOT: i32x4 53449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v4i32 (i32) -> (v128){{$}} 53566f3dc03SThomas Lively; SIMD128-NEXT: i32x4.splat $push[[R:[0-9]+]]=, $0{{$}} 53666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 5374ec8bca1SDerek Schuffdefine <4 x i32> @splat_v4i32(i32 %x) { 5384ec8bca1SDerek Schuff %v = insertelement <4 x i32> undef, i32 %x, i32 0 5394ec8bca1SDerek Schuff %res = shufflevector <4 x i32> %v, <4 x i32> undef, 5404ec8bca1SDerek Schuff <4 x i32> <i32 0, i32 0, i32 0, i32 0> 5414ec8bca1SDerek Schuff ret <4 x i32> %res 5424ec8bca1SDerek Schuff} 5434ec8bca1SDerek Schuff 5441b55b2beSThomas Lively; CHECK-LABEL: const_splat_v4i32: 545b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42{{$}} 546da26b84bSThomas Livelydefine <4 x i32> @const_splat_v4i32() { 547da26b84bSThomas Lively ret <4 x i32> <i32 42, i32 42, i32 42, i32 42> 548da26b84bSThomas Lively} 549da26b84bSThomas Lively 550c15a8784SHeejin Ahn; CHECK-LABEL: extract_v4i32: 551a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i32x4 55249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v4i32 (v128) -> (i32){{$}} 55366f3dc03SThomas Lively; SIMD128-NEXT: i32x4.extract_lane $push[[R:[0-9]+]]=, $0, 3{{$}} 55466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 555a0fd9c3eSHeejin Ahndefine i32 @extract_v4i32(<4 x i32> %v) { 556a0fd9c3eSHeejin Ahn %elem = extractelement <4 x i32> %v, i32 3 557a0fd9c3eSHeejin Ahn ret i32 %elem 558a0fd9c3eSHeejin Ahn} 559a0fd9c3eSHeejin Ahn 560fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v4i32: 561fb84fd7cSThomas Lively; NO-SIMD128-NOT: i32x4 56249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v4i32 (v128, i32) -> (i32){{$}} 563275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 564fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 565fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 5666a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 567fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 568fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 3{{$}} 569fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 570fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}} 571fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 572fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L4:[0-9]+]]=, $2, $pop[[L7]]{{$}} 573fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load $push[[R:[0-9]+]]=, 0($pop[[L4]]){{$}} 574fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 575fb84fd7cSThomas Livelydefine i32 @extract_var_v4i32(<4 x i32> %v, i32 %i) { 576fb84fd7cSThomas Lively %elem = extractelement <4 x i32> %v, i32 %i 577fb84fd7cSThomas Lively ret i32 %elem 578fb84fd7cSThomas Lively} 579fb84fd7cSThomas Lively 5804c476176SSanjay Patel; CHECK-LABEL: extract_zero_v4i32: 58111a332d0SThomas Lively; NO-SIMD128-NOT: i32x4 5824c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v4i32 (v128) -> (i32){{$}} 58311a332d0SThomas Lively; SIMD128-NEXT: i32x4.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}} 58411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 5854c476176SSanjay Pateldefine i32 @extract_zero_v4i32(<4 x i32> %v) { 5864c476176SSanjay Patel %elem = extractelement <4 x i32> %v, i32 0 58711a332d0SThomas Lively ret i32 %elem 58811a332d0SThomas Lively} 58911a332d0SThomas Lively 59082812fb9SDerek Schuff; CHECK-LABEL: replace_v4i32: 59182812fb9SDerek Schuff; NO-SIMD128-NOT: i32x4 59249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v4i32 (v128, i32) -> (v128){{$}} 59366f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $0, 2, $1{{$}} 59466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 59582812fb9SDerek Schuffdefine <4 x i32> @replace_v4i32(<4 x i32> %v, i32 %x) { 59682812fb9SDerek Schuff %res = insertelement <4 x i32> %v, i32 %x, i32 2 59782812fb9SDerek Schuff ret <4 x i32> %res 59882812fb9SDerek Schuff} 59982812fb9SDerek Schuff 600fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v4i32: 601fb84fd7cSThomas Lively; NO-SIMD128-NOT: i32x4 60249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v4i32 (v128, i32, i32) -> (v128){{$}} 603275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 604fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 605fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 6066a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 607fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 608fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 3{{$}} 609fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}} 610fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}} 611fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 612fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L4:[0-9]+]]=, $3, $pop[[L7]]{{$}} 613fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store 0($pop[[L4]]), $2{{$}} 614fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 615fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 616fb84fd7cSThomas Livelydefine <4 x i32> @replace_var_v4i32(<4 x i32> %v, i32 %i, i32 %x) { 617fb84fd7cSThomas Lively %res = insertelement <4 x i32> %v, i32 %x, i32 %i 618fb84fd7cSThomas Lively ret <4 x i32> %res 619fb84fd7cSThomas Lively} 620fb84fd7cSThomas Lively 62185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v4i32: 62211a332d0SThomas Lively; NO-SIMD128-NOT: i32x4 62385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v4i32 (v128, i32) -> (v128){{$}} 62411a332d0SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 62511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 62685a2146cSSanjay Pateldefine <4 x i32> @replace_zero_v4i32(<4 x i32> %v, i32 %x) { 62785a2146cSSanjay Patel %res = insertelement <4 x i32> %v, i32 %x, i32 0 62811a332d0SThomas Lively ret <4 x i32> %res 62911a332d0SThomas Lively} 63011a332d0SThomas Lively 631a0d25815SThomas Lively; CHECK-LABEL: shuffle_v4i32: 632a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 63349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v4i32 (v128, v128) -> (v128){{$}} 634a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 635a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 20, 21, 22, 23, 8, 9, 10, 11, 28, 29, 30, 31{{$}} 63666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 637a0d25815SThomas Livelydefine <4 x i32> @shuffle_v4i32(<4 x i32> %x, <4 x i32> %y) { 638a0d25815SThomas Lively %res = shufflevector <4 x i32> %x, <4 x i32> %y, 639a0d25815SThomas Lively <4 x i32> <i32 0, i32 5, i32 2, i32 7> 640a0d25815SThomas Lively ret <4 x i32> %res 641a0d25815SThomas Lively} 642a0d25815SThomas Lively 64311a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v4i32: 644a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 64549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v4i32 (v128, v128) -> (v128){{$}} 646a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 64711a332d0SThomas Lively; SIMD128-SAME: 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 64811a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 64911a332d0SThomas Livelydefine <4 x i32> @shuffle_undef_v4i32(<4 x i32> %x, <4 x i32> %y) { 65011a332d0SThomas Lively %res = shufflevector <4 x i32> %x, <4 x i32> %y, 65111a332d0SThomas Lively <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef> 65211a332d0SThomas Lively ret <4 x i32> %res 65311a332d0SThomas Lively} 65411a332d0SThomas Lively 6552ee686daSThomas Lively; CHECK-LABEL: build_v4i32: 6562ee686daSThomas Lively; NO-SIMD128-NOT: i32x4 65749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v4i32 (i32, i32, i32, i32) -> (v128){{$}} 65866f3dc03SThomas Lively; SIMD128-NEXT: i32x4.splat $push[[L0:[0-9]+]]=, $0{{$}} 65966f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 66066f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}} 66166f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $pop[[L2]], 3, $3{{$}} 66266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 6632ee686daSThomas Livelydefine <4 x i32> @build_v4i32(i32 %x0, i32 %x1, i32 %x2, i32 %x3) { 6642ee686daSThomas Lively %t0 = insertelement <4 x i32> undef, i32 %x0, i32 0 6652ee686daSThomas Lively %t1 = insertelement <4 x i32> %t0, i32 %x1, i32 1 6662ee686daSThomas Lively %t2 = insertelement <4 x i32> %t1, i32 %x2, i32 2 6672ee686daSThomas Lively %res = insertelement <4 x i32> %t2, i32 %x3, i32 3 6682ee686daSThomas Lively ret <4 x i32> %res 6692ee686daSThomas Lively} 6702ee686daSThomas Lively 671a0fd9c3eSHeejin Ahn; ============================================================================== 672a0fd9c3eSHeejin Ahn; 2 x i64 673a0fd9c3eSHeejin Ahn; ============================================================================== 67422442924SThomas Lively; CHECK-LABEL: const_v2i64: 67522442924SThomas Lively; NO-SIMD128-NOT: i64x2 67649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v2i64 () -> (v128){{$}} 67766f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 506097522914230528, 1084818905618843912{{$}} 67866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 67922442924SThomas Livelydefine <2 x i64> @const_v2i64() { 68022442924SThomas Lively ret <2 x i64> <i64 506097522914230528, i64 1084818905618843912> 68122442924SThomas Lively} 68222442924SThomas Lively 6834ec8bca1SDerek Schuff; CHECK-LABEL: splat_v2i64: 6844ec8bca1SDerek Schuff; NO-SIMD128-NOT: i64x2 68549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v2i64 (i64) -> (v128){{$}} 68666f3dc03SThomas Lively; SIMD128-NEXT: i64x2.splat $push[[R:[0-9]+]]=, $0{{$}} 68766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 6884ec8bca1SDerek Schuffdefine <2 x i64> @splat_v2i64(i64 %x) { 6894ec8bca1SDerek Schuff %t1 = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0 6904ec8bca1SDerek Schuff %res = insertelement <2 x i64> %t1, i64 %x, i32 1 6914ec8bca1SDerek Schuff ret <2 x i64> %res 6924ec8bca1SDerek Schuff} 6934ec8bca1SDerek Schuff 6941b55b2beSThomas Lively; CHECK-LABEL: const_splat_v2i64: 695b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42{{$}} 6961b55b2beSThomas Livelydefine <2 x i64> @const_splat_v2i64() { 6971b55b2beSThomas Lively ret <2 x i64> <i64 42, i64 42> 6981b55b2beSThomas Lively} 6991b55b2beSThomas Lively 700c15a8784SHeejin Ahn; CHECK-LABEL: extract_v2i64: 701a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i64x2 70249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v2i64 (v128) -> (i64){{$}} 70366f3dc03SThomas Lively; SIMD128-NEXT: i64x2.extract_lane $push[[R:[0-9]+]]=, $0, 1{{$}} 70466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 705a0fd9c3eSHeejin Ahndefine i64 @extract_v2i64(<2 x i64> %v) { 706a0fd9c3eSHeejin Ahn %elem = extractelement <2 x i64> %v, i64 1 707a0fd9c3eSHeejin Ahn ret i64 %elem 708a0fd9c3eSHeejin Ahn} 709a0fd9c3eSHeejin Ahn 710fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v2i64: 711fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2 71249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v2i64 (v128, i32) -> (i64){{$}} 713275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 714fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 715fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 7166a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 717fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 718fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}} 719fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 720fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}} 721fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 722fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}} 723fb84fd7cSThomas Lively; SIMD128-NEXT: i64.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}} 724fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 725fb84fd7cSThomas Livelydefine i64 @extract_var_v2i64(<2 x i64> %v, i32 %i) { 726fb84fd7cSThomas Lively %elem = extractelement <2 x i64> %v, i32 %i 727fb84fd7cSThomas Lively ret i64 %elem 728fb84fd7cSThomas Lively} 729fb84fd7cSThomas Lively 7304c476176SSanjay Patel; CHECK-LABEL: extract_zero_v2i64: 73111a332d0SThomas Lively; NO-SIMD128-NOT: i64x2 7324c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v2i64 (v128) -> (i64){{$}} 73311a332d0SThomas Lively; SIMD128-NEXT: i64x2.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}} 73411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 7354c476176SSanjay Pateldefine i64 @extract_zero_v2i64(<2 x i64> %v) { 7364c476176SSanjay Patel %elem = extractelement <2 x i64> %v, i64 0 73711a332d0SThomas Lively ret i64 %elem 73811a332d0SThomas Lively} 73911a332d0SThomas Lively 74082812fb9SDerek Schuff; CHECK-LABEL: replace_v2i64: 74182812fb9SDerek Schuff; NO-SIMD128-NOT: i64x2 74249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v2i64 (v128, i64) -> (v128){{$}} 74366f3dc03SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 74466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 74582812fb9SDerek Schuffdefine <2 x i64> @replace_v2i64(<2 x i64> %v, i64 %x) { 74682812fb9SDerek Schuff %res = insertelement <2 x i64> %v, i64 %x, i32 0 74782812fb9SDerek Schuff ret <2 x i64> %res 74882812fb9SDerek Schuff} 74982812fb9SDerek Schuff 750fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v2i64: 751fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2 75249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v2i64 (v128, i32, i64) -> (v128){{$}} 753275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 754fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 755fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 7566a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 757fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 758fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}} 759fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 760fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}} 761fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 762fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}} 763fb84fd7cSThomas Lively; SIMD128-NEXT: i64.store 0($pop[[L2]]), $2{{$}} 764fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 765fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 766fb84fd7cSThomas Livelydefine <2 x i64> @replace_var_v2i64(<2 x i64> %v, i32 %i, i64 %x) { 767fb84fd7cSThomas Lively %res = insertelement <2 x i64> %v, i64 %x, i32 %i 768fb84fd7cSThomas Lively ret <2 x i64> %res 769fb84fd7cSThomas Lively} 770fb84fd7cSThomas Lively 77185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v2i64: 77211a332d0SThomas Lively; NO-SIMD128-NOT: i64x2 77385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v2i64 (v128, i64) -> (v128){{$}} 77411a332d0SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 77511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 77685a2146cSSanjay Pateldefine <2 x i64> @replace_zero_v2i64(<2 x i64> %v, i64 %x) { 77785a2146cSSanjay Patel %res = insertelement <2 x i64> %v, i64 %x, i32 0 77811a332d0SThomas Lively ret <2 x i64> %res 77911a332d0SThomas Lively} 78011a332d0SThomas Lively 781a0d25815SThomas Lively; CHECK-LABEL: shuffle_v2i64: 782a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 78349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v2i64 (v128, v128) -> (v128){{$}} 784a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 785a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31{{$}} 78666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 787a0d25815SThomas Livelydefine <2 x i64> @shuffle_v2i64(<2 x i64> %x, <2 x i64> %y) { 788a0d25815SThomas Lively %res = shufflevector <2 x i64> %x, <2 x i64> %y, <2 x i32> <i32 0, i32 3> 789a0d25815SThomas Lively ret <2 x i64> %res 790a0d25815SThomas Lively} 791a0d25815SThomas Lively 79211a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v2i64: 793a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 79449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v2i64 (v128, v128) -> (v128){{$}} 795a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 79611a332d0SThomas Lively; SIMD128-SAME: 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 79711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 79811a332d0SThomas Livelydefine <2 x i64> @shuffle_undef_v2i64(<2 x i64> %x, <2 x i64> %y) { 79911a332d0SThomas Lively %res = shufflevector <2 x i64> %x, <2 x i64> %y, 80011a332d0SThomas Lively <2 x i32> <i32 1, i32 undef> 80111a332d0SThomas Lively ret <2 x i64> %res 80211a332d0SThomas Lively} 80311a332d0SThomas Lively 8042ee686daSThomas Lively; CHECK-LABEL: build_v2i64: 8052ee686daSThomas Lively; NO-SIMD128-NOT: i64x2 80649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v2i64 (i64, i64) -> (v128){{$}} 80766f3dc03SThomas Lively; SIMD128-NEXT: i64x2.splat $push[[L0:[0-9]+]]=, $0{{$}} 80866f3dc03SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 80966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 8102ee686daSThomas Livelydefine <2 x i64> @build_v2i64(i64 %x0, i64 %x1) { 8112ee686daSThomas Lively %t0 = insertelement <2 x i64> undef, i64 %x0, i32 0 8122ee686daSThomas Lively %res = insertelement <2 x i64> %t0, i64 %x1, i32 1 8132ee686daSThomas Lively ret <2 x i64> %res 8142ee686daSThomas Lively} 8152ee686daSThomas Lively 816a0fd9c3eSHeejin Ahn; ============================================================================== 817a0fd9c3eSHeejin Ahn; 4 x f32 818a0fd9c3eSHeejin Ahn; ============================================================================== 81922442924SThomas Lively; CHECK-LABEL: const_v4f32: 82022442924SThomas Lively; NO-SIMD128-NOT: f32x4 82149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v4f32 () -> (v128){{$}} 82266f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 823a3937b23SThomas Lively; SIMD128-SAME: 0x1.0402p-121, 0x1.0c0a08p-113, 0x1.14121p-105, 0x1.1c1a18p-97{{$}} 82466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 82522442924SThomas Livelydefine <4 x float> @const_v4f32() { 82622442924SThomas Lively ret <4 x float> <float 0x3860402000000000, float 0x38e0c0a080000000, 82722442924SThomas Lively float 0x3961412100000000, float 0x39e1c1a180000000> 82822442924SThomas Lively} 82922442924SThomas Lively 8304ec8bca1SDerek Schuff; CHECK-LABEL: splat_v4f32: 8314ec8bca1SDerek Schuff; NO-SIMD128-NOT: f32x4 83249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v4f32 (f32) -> (v128){{$}} 83366f3dc03SThomas Lively; SIMD128-NEXT: f32x4.splat $push[[R:[0-9]+]]=, $0{{$}} 83466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 8354ec8bca1SDerek Schuffdefine <4 x float> @splat_v4f32(float %x) { 8364ec8bca1SDerek Schuff %v = insertelement <4 x float> undef, float %x, i32 0 8374ec8bca1SDerek Schuff %res = shufflevector <4 x float> %v, <4 x float> undef, 8384ec8bca1SDerek Schuff <4 x i32> <i32 0, i32 0, i32 0, i32 0> 8394ec8bca1SDerek Schuff ret <4 x float> %res 8404ec8bca1SDerek Schuff} 8414ec8bca1SDerek Schuff 842da26b84bSThomas Lively; CHECK-LABEL: const_splat_v4f32 843b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 0x1.5p5, 0x1.5p5, 0x1.5p5, 0x1.5p5{{$}} 844da26b84bSThomas Livelydefine <4 x float> @const_splat_v4f32() { 845da26b84bSThomas Lively ret <4 x float> <float 42., float 42., float 42., float 42.> 846da26b84bSThomas Lively} 847da26b84bSThomas Lively 848c15a8784SHeejin Ahn; CHECK-LABEL: extract_v4f32: 849a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: f32x4 85049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v4f32 (v128) -> (f32){{$}} 85166f3dc03SThomas Lively; SIMD128-NEXT: f32x4.extract_lane $push[[R:[0-9]+]]=, $0, 3{{$}} 85266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 853a0fd9c3eSHeejin Ahndefine float @extract_v4f32(<4 x float> %v) { 854a0fd9c3eSHeejin Ahn %elem = extractelement <4 x float> %v, i32 3 855a0fd9c3eSHeejin Ahn ret float %elem 856a0fd9c3eSHeejin Ahn} 857a0fd9c3eSHeejin Ahn 858fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v4f32: 859fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2 86049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v4f32 (v128, i32) -> (f32){{$}} 861275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 862fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 863fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 8646a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 865fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 866fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 3{{$}} 867fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 868fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}} 869fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 870fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}} 871fb84fd7cSThomas Lively; SIMD128-NEXT: f32.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}} 872fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 873fb84fd7cSThomas Livelydefine float @extract_var_v4f32(<4 x float> %v, i32 %i) { 874fb84fd7cSThomas Lively %elem = extractelement <4 x float> %v, i32 %i 875fb84fd7cSThomas Lively ret float %elem 876fb84fd7cSThomas Lively} 877fb84fd7cSThomas Lively 8784c476176SSanjay Patel; CHECK-LABEL: extract_zero_v4f32: 87911a332d0SThomas Lively; NO-SIMD128-NOT: f32x4 8804c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v4f32 (v128) -> (f32){{$}} 88111a332d0SThomas Lively; SIMD128-NEXT: f32x4.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}} 88211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 8834c476176SSanjay Pateldefine float @extract_zero_v4f32(<4 x float> %v) { 8844c476176SSanjay Patel %elem = extractelement <4 x float> %v, i32 0 88511a332d0SThomas Lively ret float %elem 88611a332d0SThomas Lively} 88711a332d0SThomas Lively 88882812fb9SDerek Schuff; CHECK-LABEL: replace_v4f32: 88982812fb9SDerek Schuff; NO-SIMD128-NOT: f32x4 89049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v4f32 (v128, f32) -> (v128){{$}} 89166f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $0, 2, $1{{$}} 89266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 89382812fb9SDerek Schuffdefine <4 x float> @replace_v4f32(<4 x float> %v, float %x) { 89482812fb9SDerek Schuff %res = insertelement <4 x float> %v, float %x, i32 2 89582812fb9SDerek Schuff ret <4 x float> %res 89682812fb9SDerek Schuff} 89782812fb9SDerek Schuff 898fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v4f32: 899fb84fd7cSThomas Lively; NO-SIMD128-NOT: f32x4 90049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v4f32 (v128, i32, f32) -> (v128){{$}} 901275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 902fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 903fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 9046a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 905fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 906fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 3{{$}} 907fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 908fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}} 909fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 910fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}} 911fb84fd7cSThomas Lively; SIMD128-NEXT: f32.store 0($pop[[L2]]), $2{{$}} 912fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 913fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 914fb84fd7cSThomas Livelydefine <4 x float> @replace_var_v4f32(<4 x float> %v, i32 %i, float %x) { 915fb84fd7cSThomas Lively %res = insertelement <4 x float> %v, float %x, i32 %i 916fb84fd7cSThomas Lively ret <4 x float> %res 917fb84fd7cSThomas Lively} 918fb84fd7cSThomas Lively 91985a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v4f32: 92011a332d0SThomas Lively; NO-SIMD128-NOT: f32x4 92185a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v4f32 (v128, f32) -> (v128){{$}} 92211a332d0SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 92311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 92485a2146cSSanjay Pateldefine <4 x float> @replace_zero_v4f32(<4 x float> %v, float %x) { 92585a2146cSSanjay Patel %res = insertelement <4 x float> %v, float %x, i32 0 92611a332d0SThomas Lively ret <4 x float> %res 92711a332d0SThomas Lively} 92811a332d0SThomas Lively 929a0d25815SThomas Lively; CHECK-LABEL: shuffle_v4f32: 930a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 93149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v4f32 (v128, v128) -> (v128){{$}} 932a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 933a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 20, 21, 22, 23, 8, 9, 10, 11, 28, 29, 30, 31{{$}} 93466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 935a0d25815SThomas Livelydefine <4 x float> @shuffle_v4f32(<4 x float> %x, <4 x float> %y) { 936a0d25815SThomas Lively %res = shufflevector <4 x float> %x, <4 x float> %y, 937a0d25815SThomas Lively <4 x i32> <i32 0, i32 5, i32 2, i32 7> 938a0d25815SThomas Lively ret <4 x float> %res 939a0d25815SThomas Lively} 940a0d25815SThomas Lively 94111a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v4f32: 942a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 94349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v4f32 (v128, v128) -> (v128){{$}} 944a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 94511a332d0SThomas Lively; SIMD128-SAME: 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 94611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 94711a332d0SThomas Livelydefine <4 x float> @shuffle_undef_v4f32(<4 x float> %x, <4 x float> %y) { 94811a332d0SThomas Lively %res = shufflevector <4 x float> %x, <4 x float> %y, 94911a332d0SThomas Lively <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef> 95011a332d0SThomas Lively ret <4 x float> %res 95111a332d0SThomas Lively} 95211a332d0SThomas Lively 9532ee686daSThomas Lively; CHECK-LABEL: build_v4f32: 9542ee686daSThomas Lively; NO-SIMD128-NOT: f32x4 95549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v4f32 (f32, f32, f32, f32) -> (v128){{$}} 95666f3dc03SThomas Lively; SIMD128-NEXT: f32x4.splat $push[[L0:[0-9]+]]=, $0{{$}} 95766f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 95866f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}} 95966f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $pop[[L2]], 3, $3{{$}} 96066f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 9612ee686daSThomas Livelydefine <4 x float> @build_v4f32(float %x0, float %x1, float %x2, float %x3) { 9622ee686daSThomas Lively %t0 = insertelement <4 x float> undef, float %x0, i32 0 9632ee686daSThomas Lively %t1 = insertelement <4 x float> %t0, float %x1, i32 1 9642ee686daSThomas Lively %t2 = insertelement <4 x float> %t1, float %x2, i32 2 9652ee686daSThomas Lively %res = insertelement <4 x float> %t2, float %x3, i32 3 9662ee686daSThomas Lively ret <4 x float> %res 9672ee686daSThomas Lively} 9682ee686daSThomas Lively 969a0fd9c3eSHeejin Ahn; ============================================================================== 970a0fd9c3eSHeejin Ahn; 2 x f64 971a0fd9c3eSHeejin Ahn; ============================================================================== 97222442924SThomas Lively; CHECK-LABEL: const_v2f64: 97322442924SThomas Lively; NO-SIMD128-NOT: f64x2 97449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v2f64 () -> (v128){{$}} 97566f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 0x1.60504030201p-911, 0x1.e0d0c0b0a0908p-783{{$}} 97666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 97722442924SThomas Livelydefine <2 x double> @const_v2f64() { 97822442924SThomas Lively ret <2 x double> <double 0x0706050403020100, double 0x0F0E0D0C0B0A0908> 97922442924SThomas Lively} 98022442924SThomas Lively 9814ec8bca1SDerek Schuff; CHECK-LABEL: splat_v2f64: 9824ec8bca1SDerek Schuff; NO-SIMD128-NOT: f64x2 98349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v2f64 (f64) -> (v128){{$}} 98466f3dc03SThomas Lively; SIMD128-NEXT: f64x2.splat $push[[R:[0-9]+]]=, $0{{$}} 98566f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 9864ec8bca1SDerek Schuffdefine <2 x double> @splat_v2f64(double %x) { 9874ec8bca1SDerek Schuff %t1 = insertelement <2 x double> zeroinitializer, double %x, i3 0 9884ec8bca1SDerek Schuff %res = insertelement <2 x double> %t1, double %x, i32 1 9894ec8bca1SDerek Schuff ret <2 x double> %res 9904ec8bca1SDerek Schuff} 9914ec8bca1SDerek Schuff 992da26b84bSThomas Lively; CHECK-LABEL: const_splat_v2f64: 993b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 0x1.5p5, 0x1.5p5{{$}} 994da26b84bSThomas Livelydefine <2 x double> @const_splat_v2f64() { 995da26b84bSThomas Lively ret <2 x double> <double 42., double 42.> 996da26b84bSThomas Lively} 997da26b84bSThomas Lively 998c15a8784SHeejin Ahn; CHECK-LABEL: extract_v2f64: 999a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: f64x2 100049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v2f64 (v128) -> (f64){{$}} 100166f3dc03SThomas Lively; SIMD128-NEXT: f64x2.extract_lane $push[[R:[0-9]+]]=, $0, 1{{$}} 100266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 1003a0fd9c3eSHeejin Ahndefine double @extract_v2f64(<2 x double> %v) { 1004a0fd9c3eSHeejin Ahn %elem = extractelement <2 x double> %v, i32 1 1005a0fd9c3eSHeejin Ahn ret double %elem 1006a0fd9c3eSHeejin Ahn} 100782812fb9SDerek Schuff 1008fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v2f64: 1009fb84fd7cSThomas Lively; NO-SIMD128-NOT: i62x2 101049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v2f64 (v128, i32) -> (f64){{$}} 1011275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 1012fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 1013fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 10146a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}} 1015fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 1016fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}} 1017fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 1018fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}} 1019fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 1020fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}} 1021fb84fd7cSThomas Lively; SIMD128-NEXT: f64.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}} 1022fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 1023fb84fd7cSThomas Livelydefine double @extract_var_v2f64(<2 x double> %v, i32 %i) { 1024fb84fd7cSThomas Lively %elem = extractelement <2 x double> %v, i32 %i 1025fb84fd7cSThomas Lively ret double %elem 1026fb84fd7cSThomas Lively} 1027fb84fd7cSThomas Lively 10284c476176SSanjay Patel; CHECK-LABEL: extract_zero_v2f64: 102911a332d0SThomas Lively; NO-SIMD128-NOT: f64x2 10304c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v2f64 (v128) -> (f64){{$}} 103111a332d0SThomas Lively; SIMD128-NEXT: f64x2.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}} 103211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 10334c476176SSanjay Pateldefine double @extract_zero_v2f64(<2 x double> %v) { 10344c476176SSanjay Patel %elem = extractelement <2 x double> %v, i32 0 103511a332d0SThomas Lively ret double %elem 103611a332d0SThomas Lively} 103711a332d0SThomas Lively 103882812fb9SDerek Schuff; CHECK-LABEL: replace_v2f64: 103982812fb9SDerek Schuff; NO-SIMD128-NOT: f64x2 104049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v2f64 (v128, f64) -> (v128){{$}} 104166f3dc03SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 104266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 104382812fb9SDerek Schuffdefine <2 x double> @replace_v2f64(<2 x double> %v, double %x) { 104482812fb9SDerek Schuff %res = insertelement <2 x double> %v, double %x, i32 0 104582812fb9SDerek Schuff ret <2 x double> %res 104682812fb9SDerek Schuff} 10472ee686daSThomas Lively 1048fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v2f64: 1049fb84fd7cSThomas Lively; NO-SIMD128-NOT: f64x2 105049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v2f64 (v128, i32, f64) -> (v128){{$}} 1051275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}} 1052fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}} 1053fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}} 10546a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}} 1055fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}} 1056fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}} 1057fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}} 1058fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}} 1059fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}} 1060fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}} 1061fb84fd7cSThomas Lively; SIMD128-NEXT: f64.store 0($pop[[L2]]), $2{{$}} 1062fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}} 1063fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 1064fb84fd7cSThomas Livelydefine <2 x double> @replace_var_v2f64(<2 x double> %v, i32 %i, double %x) { 1065fb84fd7cSThomas Lively %res = insertelement <2 x double> %v, double %x, i32 %i 1066fb84fd7cSThomas Lively ret <2 x double> %res 1067fb84fd7cSThomas Lively} 1068fb84fd7cSThomas Lively 106985a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v2f64: 107011a332d0SThomas Lively; NO-SIMD128-NOT: f64x2 107185a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v2f64 (v128, f64) -> (v128){{$}} 107211a332d0SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}} 107311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 107485a2146cSSanjay Pateldefine <2 x double> @replace_zero_v2f64(<2 x double> %v, double %x) { 107585a2146cSSanjay Patel %res = insertelement <2 x double> %v, double %x, i32 0 107611a332d0SThomas Lively ret <2 x double> %res 107711a332d0SThomas Lively} 107811a332d0SThomas Lively 1079a0d25815SThomas Lively; CHECK-LABEL: shuffle_v2f64: 1080a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 108149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v2f64 (v128, v128) -> (v128){{$}} 1082a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1, 1083a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31{{$}} 108466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 1085a0d25815SThomas Livelydefine <2 x double> @shuffle_v2f64(<2 x double> %x, <2 x double> %y) { 1086a0d25815SThomas Lively %res = shufflevector <2 x double> %x, <2 x double> %y, 1087a0d25815SThomas Lively <2 x i32> <i32 0, i32 3> 1088a0d25815SThomas Lively ret <2 x double> %res 1089a0d25815SThomas Lively} 1090a0d25815SThomas Lively 109111a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v2f64: 1092a781a706SThomas Lively; NO-SIMD128-NOT: i8x16 109349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v2f64 (v128, v128) -> (v128){{$}} 1094a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0, 109511a332d0SThomas Lively; SIMD128-SAME: 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0{{$}} 109611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 109711a332d0SThomas Livelydefine <2 x double> @shuffle_undef_v2f64(<2 x double> %x, <2 x double> %y) { 109811a332d0SThomas Lively %res = shufflevector <2 x double> %x, <2 x double> %y, 109911a332d0SThomas Lively <2 x i32> <i32 1, i32 undef> 110011a332d0SThomas Lively ret <2 x double> %res 110111a332d0SThomas Lively} 110211a332d0SThomas Lively 11032ee686daSThomas Lively; CHECK-LABEL: build_v2f64: 11042ee686daSThomas Lively; NO-SIMD128-NOT: f64x2 110549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v2f64 (f64, f64) -> (v128){{$}} 110666f3dc03SThomas Lively; SIMD128-NEXT: f64x2.splat $push[[L0:[0-9]+]]=, $0{{$}} 110766f3dc03SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $pop[[L0]], 1, $1{{$}} 110866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}} 11092ee686daSThomas Livelydefine <2 x double> @build_v2f64(double %x0, double %x1) { 11102ee686daSThomas Lively %t0 = insertelement <2 x double> undef, double %x0, i32 0 11112ee686daSThomas Lively %res = insertelement <2 x double> %t0, double %x1, i32 1 11122ee686daSThomas Lively ret <2 x double> %res 11132ee686daSThomas Lively} 1114