Skip to content

Commit 78f8808

Browse files
committed
[ConstantFold] Fix incorrect inbounds inference for [0 x T] GEPs
Previously all indices into [0 x T] arrays were considered in range, which resulted in us incorrectly inferring inbounds for all GEPs of that form. We should not consider them in range here, and instead bail out of the rewriting logic (which would divide by zero). Do continue to consider 0 always in range, to avoid changing behavior for zero-index GEPs.
1 parent 9c4591d commit 78f8808

File tree

6 files changed

+82
-72
lines changed

6 files changed

+82
-72
lines changed

llvm/lib/IR/ConstantFold.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,7 +1951,7 @@ static bool isIndexInRangeOfArrayType(uint64_t NumElements,
19511951
// A negative index or an index past the end of our sequential type is
19521952
// considered out-of-range.
19531953
int64_t IndexVal = CI->getSExtValue();
1954-
if (IndexVal < 0 || (NumElements > 0 && (uint64_t)IndexVal >= NumElements))
1954+
if (IndexVal < 0 || (IndexVal != 0 && (uint64_t)IndexVal >= NumElements))
19551955
return false;
19561956

19571957
// Otherwise, it is in-range.
@@ -2202,11 +2202,17 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *PointeeTy, Constant *C,
22022202
Unknown = true;
22032203
continue;
22042204
}
2205+
2206+
// Determine the number of elements in our sequential type.
2207+
uint64_t NumElements = STy->getArrayNumElements();
2208+
if (!NumElements) {
2209+
Unknown = true;
2210+
continue;
2211+
}
2212+
22052213
// It's out of range, but we can factor it into the prior
22062214
// dimension.
22072215
NewIdxs.resize(Idxs.size());
2208-
// Determine the number of elements in our sequential type.
2209-
uint64_t NumElements = STy->getArrayNumElements();
22102216

22112217
// Expand the current index or the previous index to a vector from a scalar
22122218
// if necessary.

llvm/test/CodeGen/WebAssembly/address-offsets.ll

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ define i32 @load_test0_noinbounds() {
2323
; CHECK-LABEL: load_test0_noinbounds:
2424
; CHECK: .functype load_test0_noinbounds () -> (i32)
2525
; CHECK-NEXT: # %bb.0:
26-
; CHECK-NEXT: global.get $push0=, g@GOT
27-
; CHECK-NEXT: i32.load $push1=, 40($pop0)
28-
; CHECK-NEXT: return $pop1
26+
; CHECK-NEXT: global.get $push1=, g@GOT
27+
; CHECK-NEXT: i32.const $push0=, 40
28+
; CHECK-NEXT: i32.add $push2=, $pop1, $pop0
29+
; CHECK-NEXT: i32.load $push3=, 0($pop2)
30+
; CHECK-NEXT: return $pop3
2931
%t = load i32, ptr getelementptr ([0 x i32], ptr @g, i32 0, i32 10), align 4
3032
ret i32 %t
3133
}
@@ -404,8 +406,10 @@ define void @store_test0_noinbounds(i32 %i) {
404406
; CHECK-LABEL: store_test0_noinbounds:
405407
; CHECK: .functype store_test0_noinbounds (i32) -> ()
406408
; CHECK-NEXT: # %bb.0:
407-
; CHECK-NEXT: global.get $push0=, g@GOT
408-
; CHECK-NEXT: i32.store 40($pop0), $0
409+
; CHECK-NEXT: global.get $push1=, g@GOT
410+
; CHECK-NEXT: i32.const $push0=, 40
411+
; CHECK-NEXT: i32.add $push2=, $pop1, $pop0
412+
; CHECK-NEXT: i32.store 0($pop2), $0
409413
; CHECK-NEXT: return
410414
store i32 %i, ptr getelementptr ([0 x i32], ptr @g, i32 0, i32 10), align 4
411415
ret void

llvm/test/Transforms/InstCombine/getelementptr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ define ptr @const_gep_global_ew_larger() {
13841384

13851385
define ptr @const_gep_0xi8_global() {
13861386
; CHECK-LABEL: @const_gep_0xi8_global(
1387-
; CHECK-NEXT: ret ptr getelementptr inbounds ([0 x i8], ptr @g_0xi8_e, i64 0, i64 10)
1387+
; CHECK-NEXT: ret ptr getelementptr ([0 x i8], ptr @g_0xi8_e, i64 0, i64 10)
13881388
;
13891389
ret ptr getelementptr ([0 x i8], ptr @g_0xi8_e, i64 0, i64 10)
13901390
}

llvm/test/Transforms/InstCombine/snprintf-2.ll

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,54 +21,54 @@ declare i32 @snprintf(ptr, i64, ptr, ...)
2121

2222
define void @fold_snprintf_fmt() {
2323
; BE-LABEL: @fold_snprintf_fmt(
24-
; BE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
24+
; BE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
2525
; BE-NEXT: store i32 825373440, ptr [[PDIMAX]], align 1
2626
; BE-NEXT: store i32 3, ptr @asiz, align 4
27-
; BE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
27+
; BE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
2828
; BE-NEXT: store i32 825373440, ptr [[PD5]], align 1
29-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
30-
; BE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
29+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
30+
; BE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
3131
; BE-NEXT: store i32 825373440, ptr [[PD4]], align 1
32-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
33-
; BE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
32+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
33+
; BE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
3434
; BE-NEXT: store i16 12594, ptr [[PD3]], align 1
3535
; BE-NEXT: [[ENDPTR:%.*]] = getelementptr inbounds i8, ptr [[PD3]], i64 2
3636
; BE-NEXT: store i8 0, ptr [[ENDPTR]], align 1
37-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
38-
; BE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
37+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
38+
; BE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
3939
; BE-NEXT: store i8 49, ptr [[PD2]], align 1
4040
; BE-NEXT: [[ENDPTR1:%.*]] = getelementptr inbounds i8, ptr [[PD2]], i64 1
4141
; BE-NEXT: store i8 0, ptr [[ENDPTR1]], align 1
42-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
43-
; BE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
42+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
43+
; BE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
4444
; BE-NEXT: store i8 0, ptr [[PD1]], align 1
45-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
45+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
4646
; BE-NEXT: store i32 3, ptr @asiz, align 4
4747
; BE-NEXT: ret void
4848
;
4949
; LE-LABEL: @fold_snprintf_fmt(
50-
; LE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
50+
; LE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
5151
; LE-NEXT: store i32 3355185, ptr [[PDIMAX]], align 1
5252
; LE-NEXT: store i32 3, ptr @asiz, align 4
53-
; LE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
53+
; LE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
5454
; LE-NEXT: store i32 3355185, ptr [[PD5]], align 1
55-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
56-
; LE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
55+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
56+
; LE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
5757
; LE-NEXT: store i32 3355185, ptr [[PD4]], align 1
58-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
59-
; LE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
58+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
59+
; LE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
6060
; LE-NEXT: store i16 12849, ptr [[PD3]], align 1
6161
; LE-NEXT: [[ENDPTR:%.*]] = getelementptr inbounds i8, ptr [[PD3]], i64 2
6262
; LE-NEXT: store i8 0, ptr [[ENDPTR]], align 1
63-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
64-
; LE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
63+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
64+
; LE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
6565
; LE-NEXT: store i8 49, ptr [[PD2]], align 1
6666
; LE-NEXT: [[ENDPTR1:%.*]] = getelementptr inbounds i8, ptr [[PD2]], i64 1
6767
; LE-NEXT: store i8 0, ptr [[ENDPTR1]], align 1
68-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
69-
; LE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
68+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
69+
; LE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
7070
; LE-NEXT: store i8 0, ptr [[PD1]], align 1
71-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
71+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
7272
; LE-NEXT: store i32 3, ptr @asiz, align 4
7373
; LE-NEXT: ret void
7474
;
@@ -111,9 +111,9 @@ define void @fold_snprintf_fmt() {
111111

112112
define void @call_snprintf_fmt_ximax() {
113113
; ANY-LABEL: @call_snprintf_fmt_ximax(
114-
; ANY-NEXT: [[PDM1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
114+
; ANY-NEXT: [[PDM1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
115115
; ANY-NEXT: [[NM1:%.*]] = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) [[PDM1]], i64 -1, ptr nonnull @s)
116-
; ANY-NEXT: store i32 [[NM1]], ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
116+
; ANY-NEXT: store i32 [[NM1]], ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
117117
; ANY-NEXT: [[PDIMAXP1:%.*]] = load ptr, ptr @adst, align 8
118118
; ANY-NEXT: [[NIMAXP1:%.*]] = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) [[PDIMAXP1]], i64 2147483648, ptr nonnull @s)
119119
; ANY-NEXT: store i32 [[NIMAXP1]], ptr @asiz, align 4

llvm/test/Transforms/InstCombine/snprintf-3.ll

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,54 +22,54 @@ declare i32 @snprintf(ptr, i64, ptr, ...)
2222

2323
define void @fold_snprintf_pcnt_s() {
2424
; BE-LABEL: @fold_snprintf_pcnt_s(
25-
; BE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
25+
; BE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
2626
; BE-NEXT: store i32 825373440, ptr [[PDIMAX]], align 1
2727
; BE-NEXT: store i32 3, ptr @asiz, align 4
28-
; BE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
28+
; BE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
2929
; BE-NEXT: store i32 825373440, ptr [[PD5]], align 1
30-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
31-
; BE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
30+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
31+
; BE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
3232
; BE-NEXT: store i32 825373440, ptr [[PD4]], align 1
33-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
34-
; BE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
33+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
34+
; BE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
3535
; BE-NEXT: store i16 12594, ptr [[PD3]], align 1
3636
; BE-NEXT: [[ENDPTR:%.*]] = getelementptr inbounds i8, ptr [[PD3]], i64 2
3737
; BE-NEXT: store i8 0, ptr [[ENDPTR]], align 1
38-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
39-
; BE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
38+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
39+
; BE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
4040
; BE-NEXT: store i8 49, ptr [[PD2]], align 1
4141
; BE-NEXT: [[ENDPTR1:%.*]] = getelementptr inbounds i8, ptr [[PD2]], i64 1
4242
; BE-NEXT: store i8 0, ptr [[ENDPTR1]], align 1
43-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
44-
; BE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
43+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
44+
; BE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
4545
; BE-NEXT: store i8 0, ptr [[PD1]], align 1
46-
; BE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
46+
; BE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
4747
; BE-NEXT: store i32 3, ptr @asiz, align 4
4848
; BE-NEXT: ret void
4949
;
5050
; LE-LABEL: @fold_snprintf_pcnt_s(
51-
; LE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
51+
; LE-NEXT: [[PDIMAX:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2147483647), align 8
5252
; LE-NEXT: store i32 3355185, ptr [[PDIMAX]], align 1
5353
; LE-NEXT: store i32 3, ptr @asiz, align 4
54-
; LE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
54+
; LE-NEXT: [[PD5:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 5), align 8
5555
; LE-NEXT: store i32 3355185, ptr [[PD5]], align 1
56-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
57-
; LE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
56+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 5), align 4
57+
; LE-NEXT: [[PD4:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 4), align 8
5858
; LE-NEXT: store i32 3355185, ptr [[PD4]], align 1
59-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
60-
; LE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
59+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 4), align 4
60+
; LE-NEXT: [[PD3:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 3), align 8
6161
; LE-NEXT: store i16 12849, ptr [[PD3]], align 1
6262
; LE-NEXT: [[ENDPTR:%.*]] = getelementptr inbounds i8, ptr [[PD3]], i64 2
6363
; LE-NEXT: store i8 0, ptr [[ENDPTR]], align 1
64-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
65-
; LE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
64+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 3), align 4
65+
; LE-NEXT: [[PD2:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 2), align 8
6666
; LE-NEXT: store i8 49, ptr [[PD2]], align 1
6767
; LE-NEXT: [[ENDPTR1:%.*]] = getelementptr inbounds i8, ptr [[PD2]], i64 1
6868
; LE-NEXT: store i8 0, ptr [[ENDPTR1]], align 1
69-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
70-
; LE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
69+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 2), align 4
70+
; LE-NEXT: [[PD1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
7171
; LE-NEXT: store i8 0, ptr [[PD1]], align 1
72-
; LE-NEXT: store i32 3, ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
72+
; LE-NEXT: store i32 3, ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
7373
; LE-NEXT: store i32 3, ptr @asiz, align 4
7474
; LE-NEXT: ret void
7575
;
@@ -112,9 +112,9 @@ define void @fold_snprintf_pcnt_s() {
112112

113113
define void @call_snprintf_pcnt_s_ximax() {
114114
; ANY-LABEL: @call_snprintf_pcnt_s_ximax(
115-
; ANY-NEXT: [[PDM1:%.*]] = load ptr, ptr getelementptr inbounds ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
115+
; ANY-NEXT: [[PDM1:%.*]] = load ptr, ptr getelementptr ([0 x ptr], ptr @adst, i64 0, i64 1), align 8
116116
; ANY-NEXT: [[NM1:%.*]] = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) [[PDM1]], i64 -1, ptr nonnull @pcnt_s, ptr nonnull @s)
117-
; ANY-NEXT: store i32 [[NM1]], ptr getelementptr inbounds ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
117+
; ANY-NEXT: store i32 [[NM1]], ptr getelementptr ([0 x i32], ptr @asiz, i64 0, i64 1), align 4
118118
; ANY-NEXT: [[PDIMAXP1:%.*]] = load ptr, ptr @adst, align 8
119119
; ANY-NEXT: [[NIMAXP1:%.*]] = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) [[PDIMAXP1]], i64 2147483648, ptr nonnull @pcnt_s, ptr nonnull @s)
120120
; ANY-NEXT: store i32 [[NIMAXP1]], ptr @asiz, align 4

0 commit comments

Comments
 (0)