Skip to content

Commit 5cfc22c

Browse files
committed
Revert "[SROA] isVectorPromotionViable(): memory intrinsics operate on vectors of bytes"
This reverts commit cf624b2. It triggers crashes in clang, see the comments on github on the original change.
1 parent 7fefa99 commit 5cfc22c

File tree

17 files changed

+266
-216
lines changed

17 files changed

+266
-216
lines changed

clang/test/CodeGenOpenCL/amdgpu-nullptr.cl

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -515,17 +515,13 @@ typedef struct {
515515
private char *p;
516516
} StructTy3;
517517

518-
// CHECK-LABEL: @test_memset_private(
519-
// CHECK-NEXT: entry:
520-
// CHECK-NEXT: [[TMP0:%.*]] = bitcast [[STRUCT_STRUCTTY3:%.*]] addrspace(5)* [[PTR:%.*]] to i8 addrspace(5)*
521-
// CHECK-NEXT: [[S3_SROA_0_SROA_0_0_S3_SROA_0_0__SROA_CAST2_SROA_CAST:%.*]] = bitcast [[STRUCT_STRUCTTY3]] addrspace(5)* [[PTR]] to <32 x i8> addrspace(5)*
522-
// CHECK-NEXT: store <32 x i8> zeroinitializer, <32 x i8> addrspace(5)* [[S3_SROA_0_SROA_0_0_S3_SROA_0_0__SROA_CAST2_SROA_CAST]], align 8, !tbaa.struct !9
523-
// CHECK-NEXT: [[S3_SROA_4_0__SROA_IDX6:%.*]] = getelementptr inbounds [[STRUCT_STRUCTTY3]], [[STRUCT_STRUCTTY3]] addrspace(5)* [[PTR]], i32 0, i32 4
524-
// CHECK-NEXT: store i8 addrspace(5)* addrspacecast (i8* null to i8 addrspace(5)*), i8 addrspace(5)* addrspace(5)* [[S3_SROA_4_0__SROA_IDX6]], align 8, !tbaa.struct !12
525-
// CHECK-NEXT: [[S3_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds i8, i8 addrspace(5)* [[TMP0]], i32 36
526-
// CHECK-NEXT: [[S3_SROA_5_0__SROA_CAST8:%.*]] = bitcast i8 addrspace(5)* [[S3_SROA_5_0__SROA_IDX]] to i32 addrspace(5)*
527-
// CHECK-NEXT: store i32 0, i32 addrspace(5)* [[S3_SROA_5_0__SROA_CAST8]], align 4, !tbaa.struct !13
528-
// CHECK-NEXT: ret void
518+
// CHECK-LABEL: test_memset_private
519+
// CHECK: call void @llvm.memset.p5i8.i64(i8 addrspace(5)* noundef align 8 {{.*}}, i8 0, i64 32, i1 false)
520+
// CHECK: [[GEP:%.*]] = getelementptr inbounds %struct.StructTy3, %struct.StructTy3 addrspace(5)* %ptr, i32 0, i32 4
521+
// CHECK: store i8 addrspace(5)* addrspacecast (i8* null to i8 addrspace(5)*), i8 addrspace(5)* addrspace(5)* [[GEP]]
522+
// CHECK: [[GEP1:%.*]] = getelementptr inbounds i8, i8 addrspace(5)* {{.*}}, i32 36
523+
// CHECK: [[GEP1_CAST:%.*]] = bitcast i8 addrspace(5)* [[GEP1]] to i32 addrspace(5)*
524+
// CHECK: store i32 0, i32 addrspace(5)* [[GEP1_CAST]], align 4
529525
void test_memset_private(private StructTy3 *ptr) {
530526
StructTy3 S3 = {0, 0, 0, 0, 0};
531527
*ptr = S3;

llvm/lib/Transforms/Scalar/SROA.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,10 +1806,8 @@ static bool isVectorPromotionViableForSlice(Partition &P, const Slice &S,
18061806
? Ty->getElementType()
18071807
: FixedVectorType::get(Ty->getElementType(), NumElements);
18081808

1809-
Type *SplitIntTy = nullptr;
1810-
if (uint64_t Bitwidth = NumElements * ElementSize * 8;
1811-
Bitwidth <= IntegerType::MAX_INT_BITS)
1812-
SplitIntTy = Type::getIntNTy(Ty->getContext(), Bitwidth);
1809+
Type *SplitIntTy =
1810+
Type::getIntNTy(Ty->getContext(), NumElements * ElementSize * 8);
18131811

18141812
Use *U = S.getUse();
18151813

@@ -1828,8 +1826,7 @@ static bool isVectorPromotionViableForSlice(Partition &P, const Slice &S,
18281826
// Disable vector promotion when there are loads or stores of an FCA.
18291827
if (LTy->isStructTy())
18301828
return false;
1831-
if (SplitIntTy &&
1832-
(P.beginOffset() > S.beginOffset() || P.endOffset() < S.endOffset())) {
1829+
if (P.beginOffset() > S.beginOffset() || P.endOffset() < S.endOffset()) {
18331830
assert(LTy->isIntegerTy());
18341831
LTy = SplitIntTy;
18351832
}
@@ -1842,8 +1839,7 @@ static bool isVectorPromotionViableForSlice(Partition &P, const Slice &S,
18421839
// Disable vector promotion when there are loads or stores of an FCA.
18431840
if (STy->isStructTy())
18441841
return false;
1845-
if (SplitIntTy &&
1846-
(P.beginOffset() > S.beginOffset() || P.endOffset() < S.endOffset())) {
1842+
if (P.beginOffset() > S.beginOffset() || P.endOffset() < S.endOffset()) {
18471843
assert(STy->isIntegerTy());
18481844
STy = SplitIntTy;
18491845
}
@@ -1938,9 +1934,6 @@ static VectorType *isVectorPromotionViable(Partition &P, const DataLayout &DL) {
19381934
CheckCandidateType(LI->getType());
19391935
else if (auto *SI = dyn_cast<StoreInst>(S.getUse()->getUser()))
19401936
CheckCandidateType(SI->getValueOperand()->getType());
1941-
else if (auto *MTI = dyn_cast<MemIntrinsic>(S.getUse()->getUser()))
1942-
CheckCandidateType(FixedVectorType::get(
1943-
IntegerType::getInt8Ty(MTI->getContext()), P.size()));
19441937
}
19451938

19461939
// If we didn't find a vector type, nothing to do here.

llvm/test/CodeGen/AMDGPU/v1024.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
; GCN-LABEL: {{^}}test_v1024:
66
; GCN-NOT: v_accvgpr
7-
; GCN-COUNT-10: v_mov_b32_e32
7+
; GCN-COUNT-32: v_mov_b32_e32
88
; GCN-NOT: v_accvgpr
99
define amdgpu_kernel void @test_v1024() {
1010
entry:

llvm/test/DebugInfo/X86/sroasplit-1.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
;
2121

2222
; Verify that SROA creates a variable piece when splitting i1.
23-
; CHECK: %[[I1:.*]] = load <12 x i8>,
24-
; CHECK: call void @llvm.dbg.value(metadata <12 x i8> %[[I1]], metadata ![[VAR:.*]], metadata !DIExpression(DW_OP_LLVM_fragment, 32, 96))
23+
; CHECK: %[[I1:.*]] = alloca [12 x i8], align 4
24+
; CHECK: call void @llvm.dbg.declare(metadata [12 x i8]* %[[I1]], metadata ![[VAR:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 32, 96))
25+
; CHECK: call void @llvm.dbg.value(metadata i32 %[[A:.*]], metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 32))
26+
; CHECK: ret i32 %[[A]]
2527
; Read Var and Piece:
2628
; CHECK: ![[VAR]] = !DILocalVariable(name: "i1",{{.*}} line: 11,
2729

llvm/test/DebugInfo/X86/sroasplit-4.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
; RUN: opt -sroa < %s -S -o - | FileCheck %s
22
;
33
; Test that recursively splitting an alloca updates the debug info correctly.
4-
; CHECK: call void @llvm.dbg.value(metadata <16 x i8> %[[Y_VEC:.*]], metadata ![[Y:.*]], metadata !DIExpression())
5-
; CHECK: call void @llvm.dbg.value(metadata <16 x i8> %[[Y_VEC1:.*]], metadata ![[Y]], metadata !DIExpression())
6-
; CHECK: call void @llvm.dbg.value(metadata i32 0, metadata ![[R:.*]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 32))
7-
; CHECK: call void @llvm.dbg.value(metadata i64 0, metadata ![[R]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64))
8-
; CHECK: call void @llvm.dbg.value(metadata i64 0, metadata ![[R]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64))
9-
; CHECK: call void @llvm.dbg.value(metadata <16 x i8> %[[Y_VEC1]], metadata ![[R]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 128))
10-
;
4+
; CHECK: %[[T:.*]] = load i64, i64* @t, align 8
5+
; CHECK: call void @llvm.dbg.value(metadata i64 %[[T]], metadata ![[Y:.*]], metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64))
6+
; CHECK: %[[T1:.*]] = load i64, i64* @t, align 8
7+
; CHECK: call void @llvm.dbg.value(metadata i64 %[[T1]], metadata ![[Y]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64))
8+
; CHECK: call void @llvm.dbg.value(metadata i64 %[[T]], metadata ![[R:.*]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64))
9+
; CHECK: call void @llvm.dbg.value(metadata i64 %[[T1]], metadata ![[R]], metadata !DIExpression(DW_OP_LLVM_fragment, 256, 64))
10+
;
1111
; struct p {
1212
; __SIZE_TYPE__ s;
1313
; __SIZE_TYPE__ t;
1414
; };
15-
;
15+
;
1616
; struct r {
1717
; int i;
1818
; struct p x;
1919
; struct p y;
2020
; };
21-
;
21+
;
2222
; extern int call_me(struct r);
2323
; extern int maybe();
2424
; extern __SIZE_TYPE__ t;
25-
;
25+
;
2626
; int test() {
2727
; if (maybe())
2828
; return 0;

llvm/test/Transforms/PhaseOrdering/instcombine-sroa-inttoptr.ll

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,12 @@ define dso_local i32* @_Z3foo1S(%0* byval(%0) align 8 %arg) {
6868
; CHECK-LABEL: @_Z3foo1S(
6969
; CHECK-NEXT: bb:
7070
; CHECK-NEXT: [[I2:%.*]] = alloca [[TMP0:%.*]], align 8
71-
; CHECK-NEXT: [[TMP0]] = bitcast %0* [[ARG:%.*]] to i64*
72-
; CHECK-NEXT: [[I11_SROA_0_0_VEC_EXTRACT_EXTRACT:%.*]] = load i64, i64* [[TMP0]], align 8
73-
; CHECK-NEXT: [[TMP1:%.*]] = inttoptr i64 [[I11_SROA_0_0_VEC_EXTRACT_EXTRACT]] to i32*
71+
; CHECK-NEXT: [[I1_SROA_0_0_I5_SROA_IDX:%.*]] = getelementptr inbounds [[TMP0]], %0* [[ARG:%.*]], i64 0, i32 0
72+
; CHECK-NEXT: [[I1_SROA_0_0_COPYLOAD:%.*]] = load i32*, i32** [[I1_SROA_0_0_I5_SROA_IDX]], align 8
7473
; CHECK-NEXT: [[I_SROA_0_0_I6_SROA_IDX:%.*]] = getelementptr inbounds [[TMP0]], %0* [[I2]], i64 0, i32 0
75-
; CHECK-NEXT: store i32* [[TMP1]], i32** [[I_SROA_0_0_I6_SROA_IDX]], align 8
74+
; CHECK-NEXT: store i32* [[I1_SROA_0_0_COPYLOAD]], i32** [[I_SROA_0_0_I6_SROA_IDX]], align 8
7675
; CHECK-NEXT: tail call void @_Z7escape01S(%0* nonnull byval([[TMP0]]) align 8 [[I2]])
77-
; CHECK-NEXT: ret i32* [[TMP1]]
76+
; CHECK-NEXT: ret i32* [[I1_SROA_0_0_COPYLOAD]]
7877
;
7978
bb:
8079
%i = alloca %0, align 8
@@ -108,22 +107,21 @@ declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture)
108107
define dso_local i32* @_Z3bar1S(%0* byval(%0) align 8 %arg) {
109108
; CHECK-LABEL: @_Z3bar1S(
110109
; CHECK-NEXT: bb:
111-
; CHECK-NEXT: [[TMP0:%.*]] = bitcast %0* [[ARG:%.*]] to i64*
112-
; CHECK-NEXT: [[I13_SROA_0_0_VEC_EXTRACT_EXTRACT:%.*]] = load i64, i64* [[TMP0]], align 8
113-
; CHECK-NEXT: [[TMP1:%.*]] = inttoptr i64 [[I13_SROA_0_0_VEC_EXTRACT_EXTRACT]] to i32*
110+
; CHECK-NEXT: [[I1_SROA_0_0_I4_SROA_IDX:%.*]] = getelementptr inbounds [[TMP0:%.*]], %0* [[ARG:%.*]], i64 0, i32 0
111+
; CHECK-NEXT: [[I1_SROA_0_0_COPYLOAD:%.*]] = load i32*, i32** [[I1_SROA_0_0_I4_SROA_IDX]], align 8
114112
; CHECK-NEXT: [[I5:%.*]] = tail call i32 @_Z4condv()
115113
; CHECK-NEXT: [[I6_NOT:%.*]] = icmp eq i32 [[I5]], 0
116114
; CHECK-NEXT: br i1 [[I6_NOT]], label [[BB10:%.*]], label [[BB7:%.*]]
117115
; CHECK: bb7:
118116
; CHECK-NEXT: tail call void @_Z5sync0v()
119-
; CHECK-NEXT: tail call void @_Z7escape0Pi(i32* [[TMP1]])
117+
; CHECK-NEXT: tail call void @_Z7escape0Pi(i32* [[I1_SROA_0_0_COPYLOAD]])
120118
; CHECK-NEXT: br label [[BB13:%.*]]
121119
; CHECK: bb10:
122120
; CHECK-NEXT: tail call void @_Z5sync1v()
123-
; CHECK-NEXT: tail call void @_Z7escape1Pi(i32* [[TMP1]])
121+
; CHECK-NEXT: tail call void @_Z7escape1Pi(i32* [[I1_SROA_0_0_COPYLOAD]])
124122
; CHECK-NEXT: br label [[BB13]]
125123
; CHECK: bb13:
126-
; CHECK-NEXT: ret i32* [[TMP1]]
124+
; CHECK-NEXT: ret i32* [[I1_SROA_0_0_COPYLOAD]]
127125
;
128126
bb:
129127
%i = alloca %0, align 8

llvm/test/Transforms/SROA/address-spaces.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ declare void @llvm.memcpy.p1.p1.i32(ptr addrspace(1) nocapture, ptr addrspace(1)
1111
; Make sure an illegal bitcast isn't introduced
1212
define void @test_address_space_1_1(ptr addrspace(1) %a, ptr addrspace(1) %b) {
1313
; CHECK-LABEL: @test_address_space_1_1(
14-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr addrspace(1) [[A:%.*]], align 2
15-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
14+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr addrspace(1) [[A:%.*]], align 2
15+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
1616
; CHECK-NEXT: ret void
1717
;
1818
%aa = alloca <2 x i64>, align 16
@@ -23,8 +23,8 @@ define void @test_address_space_1_1(ptr addrspace(1) %a, ptr addrspace(1) %b) {
2323

2424
define void @test_address_space_1_0(ptr addrspace(1) %a, ptr %b) {
2525
; CHECK-LABEL: @test_address_space_1_0(
26-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr addrspace(1) [[A:%.*]], align 2
27-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr [[B:%.*]], align 2
26+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr addrspace(1) [[A:%.*]], align 2
27+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr [[B:%.*]], align 2
2828
; CHECK-NEXT: ret void
2929
;
3030
%aa = alloca <2 x i64>, align 16
@@ -35,8 +35,8 @@ define void @test_address_space_1_0(ptr addrspace(1) %a, ptr %b) {
3535

3636
define void @test_address_space_0_1(ptr %a, ptr addrspace(1) %b) {
3737
; CHECK-LABEL: @test_address_space_0_1(
38-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 2
39-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
38+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr [[A:%.*]], align 2
39+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
4040
; CHECK-NEXT: ret void
4141
;
4242
%aa = alloca <2 x i64>, align 16

llvm/test/Transforms/SROA/alignment.ll

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ define void @PR13920(ptr %a, ptr %b) {
9292
; Test that alignments on memcpy intrinsics get propagated to loads and stores.
9393
; CHECK-LABEL: @PR13920(
9494
; CHECK-NEXT: entry:
95-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 2
96-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr [[B:%.*]], align 2
95+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr [[A:%.*]], align 2
96+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr [[B:%.*]], align 2
9797
; CHECK-NEXT: ret void
9898
;
9999
; DEBUGLOC-LABEL: @PR13920(
100100
; DEBUGLOC-NEXT: entry:
101101
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META37:![0-9]+]], metadata !DIExpression()), !dbg [[DBG38:![0-9]+]]
102-
; DEBUGLOC-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 2, !dbg [[DBG39:![0-9]+]]
103-
; DEBUGLOC-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr [[B:%.*]], align 2, !dbg [[DBG40:![0-9]+]]
102+
; DEBUGLOC-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr [[A:%.*]], align 2, !dbg [[DBG39:![0-9]+]]
103+
; DEBUGLOC-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr [[B:%.*]], align 2, !dbg [[DBG40:![0-9]+]]
104104
; DEBUGLOC-NEXT: ret void, !dbg [[DBG41:![0-9]+]]
105105
;
106106

@@ -118,17 +118,21 @@ define void @test3(ptr %x) {
118118
; reduce the alignment.
119119
; CHECK-LABEL: @test3(
120120
; CHECK-NEXT: entry:
121-
; CHECK-NEXT: [[A_SROA_0_0_COPYLOAD:%.*]] = load <22 x i8>, ptr [[X:%.*]], align 8
122-
; CHECK-NEXT: [[B_SROA_0_6_COPYLOAD:%.*]] = load <18 x i8>, ptr [[X]], align 2
121+
; CHECK-NEXT: [[A_SROA_0:%.*]] = alloca [22 x i8], align 8
122+
; CHECK-NEXT: [[B_SROA_0:%.*]] = alloca [18 x i8], align 2
123+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 [[A_SROA_0]], ptr align 8 [[X:%.*]], i32 22, i1 false)
124+
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 2 [[B_SROA_0]], ptr align 2 [[X]], i32 18, i1 false)
123125
; CHECK-NEXT: ret void
124126
;
125127
; DEBUGLOC-LABEL: @test3(
126128
; DEBUGLOC-NEXT: entry:
127-
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META44:![0-9]+]], metadata !DIExpression()), !dbg [[DBG47:![0-9]+]]
128-
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META45:![0-9]+]], metadata !DIExpression()), !dbg [[DBG48:![0-9]+]]
129-
; DEBUGLOC-NEXT: [[A_SROA_0_0_COPYLOAD:%.*]] = load <22 x i8>, ptr [[X:%.*]], align 8, !dbg [[DBG49:![0-9]+]]
129+
; DEBUGLOC-NEXT: [[A_SROA_0:%.*]] = alloca [22 x i8], align 8, !dbg [[DBG47:![0-9]+]]
130+
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META44:![0-9]+]], metadata !DIExpression()), !dbg [[DBG47]]
131+
; DEBUGLOC-NEXT: [[B_SROA_0:%.*]] = alloca [18 x i8], align 2, !dbg [[DBG48:![0-9]+]]
132+
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META45:![0-9]+]], metadata !DIExpression()), !dbg [[DBG48]]
133+
; DEBUGLOC-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 [[A_SROA_0]], ptr align 8 [[X:%.*]], i32 22, i1 false), !dbg [[DBG49:![0-9]+]]
130134
; DEBUGLOC-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META46:![0-9]+]], metadata !DIExpression()), !dbg [[DBG50:![0-9]+]]
131-
; DEBUGLOC-NEXT: [[B_SROA_0_6_COPYLOAD:%.*]] = load <18 x i8>, ptr [[X]], align 2, !dbg [[DBG51:![0-9]+]]
135+
; DEBUGLOC-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 2 [[B_SROA_0]], ptr align 2 [[X]], i32 18, i1 false), !dbg [[DBG51:![0-9]+]]
132136
; DEBUGLOC-NEXT: ret void, !dbg [[DBG52:![0-9]+]]
133137
;
134138

llvm/test/Transforms/SROA/alloca-address-space.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ declare void @llvm.memcpy.p1.p1.i32(ptr addrspace(1) nocapture, ptr addrspace(1)
1010

1111
define void @test_address_space_1_1(ptr addrspace(1) %a, ptr addrspace(1) %b) {
1212
; CHECK-LABEL: @test_address_space_1_1(
13-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr addrspace(1) [[A:%.*]], align 2
14-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
13+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr addrspace(1) [[A:%.*]], align 2
14+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
1515
; CHECK-NEXT: ret void
1616
;
1717
%aa = alloca <2 x i64>, align 16, addrspace(2)
@@ -22,8 +22,8 @@ define void @test_address_space_1_1(ptr addrspace(1) %a, ptr addrspace(1) %b) {
2222

2323
define void @test_address_space_1_0(ptr addrspace(1) %a, ptr addrspace(2) %b) {
2424
; CHECK-LABEL: @test_address_space_1_0(
25-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr addrspace(1) [[A:%.*]], align 2
26-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr addrspace(2) [[B:%.*]], align 2
25+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr addrspace(1) [[A:%.*]], align 2
26+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr addrspace(2) [[B:%.*]], align 2
2727
; CHECK-NEXT: ret void
2828
;
2929
%aa = alloca <2 x i64>, align 16, addrspace(2)
@@ -34,8 +34,8 @@ define void @test_address_space_1_0(ptr addrspace(1) %a, ptr addrspace(2) %b) {
3434

3535
define void @test_address_space_0_1(ptr addrspace(2) %a, ptr addrspace(1) %b) {
3636
; CHECK-LABEL: @test_address_space_0_1(
37-
; CHECK-NEXT: [[AA_SROA_0_0_COPYLOAD:%.*]] = load <16 x i8>, ptr addrspace(2) [[A:%.*]], align 2
38-
; CHECK-NEXT: store <16 x i8> [[AA_SROA_0_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
37+
; CHECK-NEXT: [[AA_0_COPYLOAD:%.*]] = load <2 x i64>, ptr addrspace(2) [[A:%.*]], align 2
38+
; CHECK-NEXT: store <2 x i64> [[AA_0_COPYLOAD]], ptr addrspace(1) [[B:%.*]], align 2
3939
; CHECK-NEXT: ret void
4040
;
4141
%aa = alloca <2 x i64>, align 16, addrspace(2)

0 commit comments

Comments
 (0)