Skip to content

Commit 41ac47e

Browse files
committed
Use InBoundsGEP instead of GEP
1 parent 2212ea8 commit 41ac47e

File tree

2 files changed

+29
-29
lines changed

2 files changed

+29
-29
lines changed

llvm/lib/Target/DirectX/DXILLegalizePass.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,9 @@ static void emitMemcpyExpansion(IRBuilder<> &Builder, Value *Dst, Value *Src,
295295
"memcpy length must be divisible by array element type");
296296
for (uint64_t I = 0; I < NumElemsToCopy; ++I) {
297297
Value *Offset = ConstantInt::get(Type::getInt32Ty(Ctx), I);
298-
Value *SrcPtr = Builder.CreateGEP(ElemTy, Src, Offset, "gep");
298+
Value *SrcPtr = Builder.CreateInBoundsGEP(ElemTy, Src, Offset, "gep");
299299
Value *SrcVal = Builder.CreateLoad(ElemTy, SrcPtr);
300-
Value *DstPtr = Builder.CreateGEP(ElemTy, Dst, Offset, "gep");
300+
Value *DstPtr = Builder.CreateInBoundsGEP(ElemTy, Dst, Offset, "gep");
301301
Builder.CreateStore(SrcVal, DstPtr);
302302
}
303303
}

llvm/test/CodeGen/DirectX/legalize-memcpy.ll

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ define void @replace_2x4xint_global_memcpy_test() #0 {
88
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
99
; CHECK-NEXT: [[TMP1:%.*]] = alloca [2 x <4 x i32>], align 16
1010
; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr addrspace(2) @outputStrides, align 16
11-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr <4 x i32>, ptr [[TMP1]], i32 0
11+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds <4 x i32>, ptr [[TMP1]], i32 0
1212
; CHECK-NEXT: store <4 x i32> [[TMP2]], ptr [[GEP]], align 16
13-
; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr addrspace(2) getelementptr (<4 x i32>, ptr addrspace(2) @outputStrides, i32 1), align 16
14-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr <4 x i32>, ptr [[TMP1]], i32 1
13+
; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr addrspace(2) getelementptr inbounds (<4 x i32>, ptr addrspace(2) @outputStrides, i32 1), align 16
14+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds <4 x i32>, ptr [[TMP1]], i32 1
1515
; CHECK-NEXT: store <4 x i32> [[TMP3]], ptr [[GEP1]], align 16
1616
; CHECK-NEXT: ret void
1717
;
@@ -25,9 +25,9 @@ define void @replace_int_memcpy_test() #0 {
2525
; CHECK-SAME: ) #[[ATTR0]] {
2626
; CHECK-NEXT: [[TMP1:%.*]] = alloca [1 x i32], align 4
2727
; CHECK-NEXT: [[TMP2:%.*]] = alloca [1 x i32], align 4
28-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[TMP1]], i32 0
28+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 0
2929
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP]], align 4
30-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[TMP2]], i32 0
30+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 0
3131
; CHECK-NEXT: store i32 [[TMP3]], ptr [[GEP1]], align 4
3232
; CHECK-NEXT: ret void
3333
;
@@ -42,17 +42,17 @@ define void @replace_3int_memcpy_test() #0 {
4242
; CHECK-SAME: ) #[[ATTR0]] {
4343
; CHECK-NEXT: [[TMP1:%.*]] = alloca [3 x i32], align 4
4444
; CHECK-NEXT: [[TMP2:%.*]] = alloca [3 x i32], align 4
45-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr [[TMP1]], i32 0
45+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 0
4646
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP]], align 4
47-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[TMP2]], i32 0
47+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 0
4848
; CHECK-NEXT: store i32 [[TMP3]], ptr [[GEP1]], align 4
49-
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[TMP1]], i32 1
49+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
5050
; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[GEP2]], align 4
51-
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i32, ptr [[TMP2]], i32 1
51+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 1
5252
; CHECK-NEXT: store i32 [[TMP4]], ptr [[GEP3]], align 4
53-
; CHECK-NEXT: [[GEP4:%.*]] = getelementptr i32, ptr [[TMP1]], i32 2
53+
; CHECK-NEXT: [[GEP4:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 2
5454
; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[GEP4]], align 4
55-
; CHECK-NEXT: [[GEP5:%.*]] = getelementptr i32, ptr [[TMP2]], i32 2
55+
; CHECK-NEXT: [[GEP5:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 2
5656
; CHECK-NEXT: store i32 [[TMP5]], ptr [[GEP5]], align 4
5757
; CHECK-NEXT: ret void
5858
;
@@ -67,13 +67,13 @@ define void @replace_int16_memcpy_test() #0 {
6767
; CHECK-SAME: ) #[[ATTR0]] {
6868
; CHECK-NEXT: [[TMP1:%.*]] = alloca [2 x i16], align 2
6969
; CHECK-NEXT: [[TMP2:%.*]] = alloca [2 x i16], align 2
70-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr [[TMP1]], i32 0
70+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 0
7171
; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[GEP]], align 2
72-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i16, ptr [[TMP2]], i32 0
72+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i16, ptr [[TMP2]], i32 0
7373
; CHECK-NEXT: store i16 [[TMP3]], ptr [[GEP1]], align 2
74-
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i16, ptr [[TMP1]], i32 1
74+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 1
7575
; CHECK-NEXT: [[TMP4:%.*]] = load i16, ptr [[GEP2]], align 2
76-
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i16, ptr [[TMP2]], i32 1
76+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds i16, ptr [[TMP2]], i32 1
7777
; CHECK-NEXT: store i16 [[TMP4]], ptr [[GEP3]], align 2
7878
; CHECK-NEXT: ret void
7979
;
@@ -88,13 +88,13 @@ define void @replace_float_memcpy_test() #0 {
8888
; CHECK-SAME: ) #[[ATTR0]] {
8989
; CHECK-NEXT: [[TMP1:%.*]] = alloca [2 x float], align 4
9090
; CHECK-NEXT: [[TMP2:%.*]] = alloca [2 x float], align 4
91-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr float, ptr [[TMP1]], i32 0
91+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 0
9292
; CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[GEP]], align 4
93-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr float, ptr [[TMP2]], i32 0
93+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds float, ptr [[TMP2]], i32 0
9494
; CHECK-NEXT: store float [[TMP3]], ptr [[GEP1]], align 4
95-
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr float, ptr [[TMP1]], i32 1
95+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
9696
; CHECK-NEXT: [[TMP4:%.*]] = load float, ptr [[GEP2]], align 4
97-
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr float, ptr [[TMP2]], i32 1
97+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds float, ptr [[TMP2]], i32 1
9898
; CHECK-NEXT: store float [[TMP4]], ptr [[GEP3]], align 4
9999
; CHECK-NEXT: ret void
100100
;
@@ -109,13 +109,13 @@ define void @replace_double_memcpy_test() #0 {
109109
; CHECK-SAME: ) #[[ATTR0]] {
110110
; CHECK-NEXT: [[TMP1:%.*]] = alloca [2 x double], align 4
111111
; CHECK-NEXT: [[TMP2:%.*]] = alloca [2 x double], align 4
112-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr double, ptr [[TMP1]], i32 0
112+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 0
113113
; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr [[GEP]], align 8
114-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr double, ptr [[TMP2]], i32 0
114+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 0
115115
; CHECK-NEXT: store double [[TMP3]], ptr [[GEP1]], align 8
116-
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr double, ptr [[TMP1]], i32 1
116+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
117117
; CHECK-NEXT: [[TMP4:%.*]] = load double, ptr [[GEP2]], align 8
118-
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr double, ptr [[TMP2]], i32 1
118+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
119119
; CHECK-NEXT: store double [[TMP4]], ptr [[GEP3]], align 8
120120
; CHECK-NEXT: ret void
121121
;
@@ -130,13 +130,13 @@ define void @replace_half_memcpy_test() #0 {
130130
; CHECK-SAME: ) #[[ATTR0]] {
131131
; CHECK-NEXT: [[TMP1:%.*]] = alloca [2 x half], align 2
132132
; CHECK-NEXT: [[TMP2:%.*]] = alloca [2 x half], align 2
133-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr half, ptr [[TMP1]], i32 0
133+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds half, ptr [[TMP1]], i32 0
134134
; CHECK-NEXT: [[TMP3:%.*]] = load half, ptr [[GEP]], align 2
135-
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr half, ptr [[TMP2]], i32 0
135+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds half, ptr [[TMP2]], i32 0
136136
; CHECK-NEXT: store half [[TMP3]], ptr [[GEP1]], align 2
137-
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr half, ptr [[TMP1]], i32 1
137+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds half, ptr [[TMP1]], i32 1
138138
; CHECK-NEXT: [[TMP4:%.*]] = load half, ptr [[GEP2]], align 2
139-
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr half, ptr [[TMP2]], i32 1
139+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds half, ptr [[TMP2]], i32 1
140140
; CHECK-NEXT: store half [[TMP4]], ptr [[GEP3]], align 2
141141
; CHECK-NEXT: ret void
142142
;

0 commit comments

Comments
 (0)