brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 8934941 Raw
113 lines · plain
1; RUN: opt < %s -mattr=+neon -interleaved-access -S | FileCheck %s2; RUN: opt < %s -mattr=+neon -passes=interleaved-access -S | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"5target triple = "arm---eabi"6 7define void @extract_user_basic(ptr %ptr, i1 %c) {8; CHECK-LABEL: @extract_user_basic(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[VLDN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.arm.neon.vld2.v4i32.p0(ptr %ptr, i32 8)11; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[VLDN]], 012; CHECK-NEXT:    br i1 %c, label %if.then, label %if.merge13; CHECK:       if.then:14; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <4 x i32> [[TMP1]], i64 115; CHECK-NEXT:    br label %if.merge16; CHECK:       if.merge:17; CHECK-NEXT:    ret void18;19entry:20  %interleaved.vec = load <8 x i32>, ptr %ptr, align 821  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>22  br i1 %c, label %if.then, label %if.merge23 24if.then:25  %e0 = extractelement <8 x i32> %interleaved.vec, i32 226  br label %if.merge27 28if.merge:29  ret void30}31 32define void @extract_user_multi(ptr %ptr, i1 %c) {33; CHECK-LABEL: @extract_user_multi(34; CHECK-NEXT:  entry:35; CHECK-NEXT:    [[VLDN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.arm.neon.vld2.v4i32.p0(ptr %ptr, i32 8)36; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[VLDN]], 037; CHECK-NEXT:    br i1 %c, label %if.then, label %if.merge38; CHECK:       if.then:39; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <4 x i32> [[TMP1]], i64 040; CHECK-NEXT:    br label %if.merge41; CHECK:       if.merge:42; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <4 x i32> [[TMP1]], i64 143; CHECK-NEXT:    ret void44;45entry:46  %interleaved.vec = load <8 x i32>, ptr %ptr, align 847  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>48  br i1 %c, label %if.then, label %if.merge49 50if.then:51  %e0 = extractelement <8 x i32> %interleaved.vec, i32 052  br label %if.merge53 54if.merge:55  %e1 = extractelement <8 x i32> %interleaved.vec, i32 256  ret void57}58 59define void @extract_user_multi_no_dom(ptr %ptr, i1 %c) {60; CHECK-LABEL: @extract_user_multi_no_dom(61; CHECK-NOT:     @llvm.arm.neon62; CHECK:         ret void63;64entry:65  %interleaved.vec = load <8 x i32>, ptr %ptr, align 866  %e0 = extractelement <8 x i32> %interleaved.vec, i32 067  br i1 %c, label %if.then, label %if.merge68 69if.then:70  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>71  %e1 = extractelement <8 x i32> %interleaved.vec, i32 272  br label %if.merge73 74if.merge:75  ret void76}77 78define void @extract_user_wrong_const_index(ptr %ptr) {79; CHECK-LABEL: @extract_user_wrong_const_index(80; CHECK-NOT:     @llvm.arm.neon81; CHECK:         ret void82;83entry:84  %interleaved.vec = load <8 x i32>, ptr %ptr, align 885  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>86  %e0 = extractelement <8 x i32> %interleaved.vec, i32 187  ret void88}89 90define void @extract_user_undef_index(ptr %ptr) {91; CHECK-LABEL: @extract_user_undef_index(92; CHECK-NOT:     @llvm.arm.neon93; CHECK:         ret void94;95entry:96  %interleaved.vec = load <8 x i32>, ptr %ptr, align 897  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>98  %e0 = extractelement <8 x i32> %interleaved.vec, i32 undef99  ret void100}101 102define void @extract_user_var_index(ptr %ptr, i32 %i) {103; CHECK-LABEL: @extract_user_var_index(104; CHECK-NOT:     @llvm.arm.neon105; CHECK:         ret void106;107entry:108  %interleaved.vec = load <8 x i32>, ptr %ptr, align 8109  %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>110  %e0 = extractelement <8 x i32> %interleaved.vec, i32 %i111  ret void112}113