brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 81487f3 Raw
241 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s3 4; Test SIMD v128.load{32,64}_zero instructions5 6target triple = "wasm32-unknown-unknown"7 8;===----------------------------------------------------------------------------9; v128.load32_zero10;===----------------------------------------------------------------------------11 12define <4 x i32> @load_zero_i32_no_offset(ptr %p) {13; CHECK-LABEL: load_zero_i32_no_offset:14; CHECK:         .functype load_zero_i32_no_offset (i32) -> (v128)15; CHECK-NEXT:  # %bb.0:16; CHECK-NEXT:    local.get 017; CHECK-NEXT:    v128.load32_zero 018; CHECK-NEXT:    # fallthrough-return19  %x = load i32, ptr %p20  %v = insertelement <4 x i32> zeroinitializer, i32 %x, i32 021  ret <4 x i32> %v22}23 24define <4 x i32> @load_zero_i32_with_folded_offset(ptr %p) {25; CHECK-LABEL: load_zero_i32_with_folded_offset:26; CHECK:         .functype load_zero_i32_with_folded_offset (i32) -> (v128)27; CHECK-NEXT:  # %bb.0:28; CHECK-NEXT:    local.get 029; CHECK-NEXT:    v128.load32_zero 2430; CHECK-NEXT:    # fallthrough-return31  %q = ptrtoint ptr %p to i3232  %r = add nuw i32 %q, 2433  %s = inttoptr i32 %r to ptr34  %x = load i32, ptr %s35  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 036  ret <4 x i32> %t37}38 39define <4 x i32> @load_zero_i32_with_folded_gep_offset(ptr %p) {40; CHECK-LABEL: load_zero_i32_with_folded_gep_offset:41; CHECK:         .functype load_zero_i32_with_folded_gep_offset (i32) -> (v128)42; CHECK-NEXT:  # %bb.0:43; CHECK-NEXT:    local.get 044; CHECK-NEXT:    v128.load32_zero 2445; CHECK-NEXT:    # fallthrough-return46  %s = getelementptr inbounds i32, ptr %p, i32 647  %x = load i32, ptr %s48  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 049  ret <4 x i32> %t50}51 52define <4 x i32> @load_zero_i32_with_unfolded_gep_negative_offset(ptr %p) {53; CHECK-LABEL: load_zero_i32_with_unfolded_gep_negative_offset:54; CHECK:         .functype load_zero_i32_with_unfolded_gep_negative_offset (i32) -> (v128)55; CHECK-NEXT:  # %bb.0:56; CHECK-NEXT:    local.get 057; CHECK-NEXT:    i32.const -2458; CHECK-NEXT:    i32.add59; CHECK-NEXT:    v128.load32_zero 060; CHECK-NEXT:    # fallthrough-return61  %s = getelementptr inbounds i32, ptr %p, i32 -662  %x = load i32, ptr %s63  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 064  ret <4 x i32> %t65}66 67define <4 x i32> @load_zero_i32_with_unfolded_offset(ptr %p) {68; CHECK-LABEL: load_zero_i32_with_unfolded_offset:69; CHECK:         .functype load_zero_i32_with_unfolded_offset (i32) -> (v128)70; CHECK-NEXT:  # %bb.0:71; CHECK-NEXT:    local.get 072; CHECK-NEXT:    i32.const 2473; CHECK-NEXT:    i32.add74; CHECK-NEXT:    v128.load32_zero 075; CHECK-NEXT:    # fallthrough-return76  %q = ptrtoint ptr %p to i3277  %r = add nsw i32 %q, 2478  %s = inttoptr i32 %r to ptr79  %x = load i32, ptr %s80  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 081  ret <4 x i32> %t82}83 84define <4 x i32> @load_zero_i32_with_unfolded_gep_offset(ptr %p) {85; CHECK-LABEL: load_zero_i32_with_unfolded_gep_offset:86; CHECK:         .functype load_zero_i32_with_unfolded_gep_offset (i32) -> (v128)87; CHECK-NEXT:  # %bb.0:88; CHECK-NEXT:    local.get 089; CHECK-NEXT:    i32.const 2490; CHECK-NEXT:    i32.add91; CHECK-NEXT:    v128.load32_zero 092; CHECK-NEXT:    # fallthrough-return93  %s = getelementptr i32, ptr %p, i32 694  %x = load i32, ptr %s95  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 096  ret <4 x i32> %t97}98 99define <4 x i32> @load_zero_i32_from_numeric_address() {100; CHECK-LABEL: load_zero_i32_from_numeric_address:101; CHECK:         .functype load_zero_i32_from_numeric_address () -> (v128)102; CHECK-NEXT:  # %bb.0:103; CHECK-NEXT:    i32.const 0104; CHECK-NEXT:    v128.load32_zero 42105; CHECK-NEXT:    # fallthrough-return106  %s = inttoptr i32 42 to ptr107  %x = load i32, ptr %s108  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 0109  ret <4 x i32> %t110}111 112@gv_i32 = global i32 0113define <4 x i32> @load_zero_i32_from_global_address() {114; CHECK-LABEL: load_zero_i32_from_global_address:115; CHECK:         .functype load_zero_i32_from_global_address () -> (v128)116; CHECK-NEXT:  # %bb.0:117; CHECK-NEXT:    i32.const 0118; CHECK-NEXT:    v128.load32_zero gv_i32119; CHECK-NEXT:    # fallthrough-return120  %x = load i32, ptr @gv_i32121  %t = insertelement <4 x i32> zeroinitializer, i32 %x, i32 0122  ret <4 x i32> %t123}124 125;===----------------------------------------------------------------------------126; v128.load64_zero127;===----------------------------------------------------------------------------128 129define <2 x i64> @load_zero_i64_no_offset(ptr %p) {130; CHECK-LABEL: load_zero_i64_no_offset:131; CHECK:         .functype load_zero_i64_no_offset (i32) -> (v128)132; CHECK-NEXT:  # %bb.0:133; CHECK-NEXT:    local.get 0134; CHECK-NEXT:    v128.load64_zero 0135; CHECK-NEXT:    # fallthrough-return136  %x = load i64, ptr %p137  %v = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0138  ret <2 x i64> %v139}140 141define <2 x i64> @load_zero_i64_with_folded_offset(ptr %p) {142; CHECK-LABEL: load_zero_i64_with_folded_offset:143; CHECK:         .functype load_zero_i64_with_folded_offset (i32) -> (v128)144; CHECK-NEXT:  # %bb.0:145; CHECK-NEXT:    local.get 0146; CHECK-NEXT:    v128.load64_zero 24147; CHECK-NEXT:    # fallthrough-return148  %q = ptrtoint ptr %p to i32149  %r = add nuw i32 %q, 24150  %s = inttoptr i32 %r to ptr151  %x = load i64, ptr %s152  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0153  ret <2 x i64> %t154}155 156define <2 x i64> @load_zero_i64_with_folded_gep_offset(ptr %p) {157; CHECK-LABEL: load_zero_i64_with_folded_gep_offset:158; CHECK:         .functype load_zero_i64_with_folded_gep_offset (i32) -> (v128)159; CHECK-NEXT:  # %bb.0:160; CHECK-NEXT:    local.get 0161; CHECK-NEXT:    v128.load64_zero 48162; CHECK-NEXT:    # fallthrough-return163  %s = getelementptr inbounds i64, ptr %p, i64 6164  %x = load i64, ptr %s165  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0166  ret <2 x i64> %t167}168 169define <2 x i64> @load_zero_i64_with_unfolded_gep_negative_offset(ptr %p) {170; CHECK-LABEL: load_zero_i64_with_unfolded_gep_negative_offset:171; CHECK:         .functype load_zero_i64_with_unfolded_gep_negative_offset (i32) -> (v128)172; CHECK-NEXT:  # %bb.0:173; CHECK-NEXT:    local.get 0174; CHECK-NEXT:    i32.const -48175; CHECK-NEXT:    i32.add176; CHECK-NEXT:    v128.load64_zero 0177; CHECK-NEXT:    # fallthrough-return178  %s = getelementptr inbounds i64, ptr %p, i64 -6179  %x = load i64, ptr %s180  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0181  ret <2 x i64> %t182}183 184define <2 x i64> @load_zero_i64_with_unfolded_offset(ptr %p) {185; CHECK-LABEL: load_zero_i64_with_unfolded_offset:186; CHECK:         .functype load_zero_i64_with_unfolded_offset (i32) -> (v128)187; CHECK-NEXT:  # %bb.0:188; CHECK-NEXT:    local.get 0189; CHECK-NEXT:    i32.const 24190; CHECK-NEXT:    i32.add191; CHECK-NEXT:    v128.load64_zero 0192; CHECK-NEXT:    # fallthrough-return193  %q = ptrtoint ptr %p to i32194  %r = add nsw i32 %q, 24195  %s = inttoptr i32 %r to ptr196  %x = load i64, ptr %s197  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0198  ret <2 x i64> %t199}200 201define <2 x i64> @load_zero_i64_with_unfolded_gep_offset(ptr %p) {202; CHECK-LABEL: load_zero_i64_with_unfolded_gep_offset:203; CHECK:         .functype load_zero_i64_with_unfolded_gep_offset (i32) -> (v128)204; CHECK-NEXT:  # %bb.0:205; CHECK-NEXT:    local.get 0206; CHECK-NEXT:    i32.const 48207; CHECK-NEXT:    i32.add208; CHECK-NEXT:    v128.load64_zero 0209; CHECK-NEXT:    # fallthrough-return210  %s = getelementptr i64, ptr %p, i64 6211  %x = load i64, ptr %s212  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0213  ret <2 x i64> %t214}215 216define <2 x i64> @load_zero_i64_from_numeric_address() {217; CHECK-LABEL: load_zero_i64_from_numeric_address:218; CHECK:         .functype load_zero_i64_from_numeric_address () -> (v128)219; CHECK-NEXT:  # %bb.0:220; CHECK-NEXT:    i32.const 0221; CHECK-NEXT:    v128.load64_zero 42222; CHECK-NEXT:    # fallthrough-return223  %s = inttoptr i32 42 to ptr224  %x = load i64, ptr %s225  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0226  ret <2 x i64> %t227}228 229@gv_i64 = global i64 0230define <2 x i64> @load_zero_i64_from_global_address() {231; CHECK-LABEL: load_zero_i64_from_global_address:232; CHECK:         .functype load_zero_i64_from_global_address () -> (v128)233; CHECK-NEXT:  # %bb.0:234; CHECK-NEXT:    i32.const 0235; CHECK-NEXT:    v128.load64_zero gv_i64236; CHECK-NEXT:    # fallthrough-return237  %x = load i64, ptr @gv_i64238  %t = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0239  ret <2 x i64> %t240}241