Skip to content

Commit 0362c64

Browse files
committed
[CIR][LowerToLLVM] fixup! CIR generated LLVM code for pointer arithmetic should
have inbounds.
1 parent eacaabb commit 0362c64

15 files changed

+40
-33
lines changed

clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -851,8 +851,9 @@ mlir::LogicalResult CIRToLLVMPtrStrideOpLowering::matchAndRewrite(
851851
}
852852
}
853853

854-
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
855-
ptrStrideOp, resultTy, elementTy, adaptor.getBase(), index);
854+
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(ptrStrideOp, resultTy,
855+
elementTy, adaptor.getBase(),
856+
index, /*inbounds=*/true);
856857
return mlir::success();
857858
}
858859

clang/test/CIR/CodeGen/address-space-conversion.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void test_side_effect(pi1_t b) {
6262
// CIR: %[[#CAST:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, addrspace(target<2>)>
6363
// CIR-NEXT: cir.store %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<2>)>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<2>)>>
6464

65-
// LLVM: %{{[0-9]+}} = getelementptr i32, ptr addrspace(1) %{{[0-9]+}}, i64 1
65+
// LLVM: %{{[0-9]+}} = getelementptr inbounds i32, ptr addrspace(1) %{{[0-9]+}}, i64 1
6666
// LLVM: store ptr addrspace(2) null, ptr %{{[0-9]+}}, align 8
6767

6868
}

clang/test/CIR/CodeGen/clear_cache.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ char buffer[32] = "This is a largely unused buffer";
2020
// CIR: cir.clear_cache %[[VAL_3]] : !cir.ptr<!void>, %[[VAL_8]],
2121

2222
// LLVM-LABEL: main
23-
// LLVM: call void @llvm.clear_cache(ptr @buffer, ptr getelementptr (i8, ptr @buffer, i64 32))
23+
// LLVM: call void @llvm.clear_cache(ptr @buffer, ptr getelementptr inbounds (i8, ptr @buffer, i64 32))
2424

2525
int main(void) {
2626
__builtin___clear_cache(buffer, buffer+32);

clang/test/CIR/CodeGen/initlist-ptr-ptr.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ void test() {
7979
// LLVM: [[SCOPE_START]]: ; preds = %0
8080
// LLVM: [[PTR_FIRST_ELEM:%.*]] = getelementptr ptr, ptr [[ELEM_ARRAY_PTR]], i32 0
8181
// LLVM: store ptr @.str, ptr [[PTR_FIRST_ELEM]], align 8
82-
// LLVM: [[PTR_SECOND_ELEM:%.*]] = getelementptr ptr, ptr [[PTR_FIRST_ELEM]], i64 1
82+
// LLVM: [[PTR_SECOND_ELEM:%.*]] = getelementptr inbounds ptr, ptr [[PTR_FIRST_ELEM]], i64 1
8383
// LLVM: store ptr @.str.1, ptr [[PTR_SECOND_ELEM]], align 8
8484
// LLVM: [[INIT_START_FLD_PTR:%.*]] = getelementptr %"class.std::initializer_list<const char *>", ptr [[INIT_STRUCT]], i32 0, i32 0
8585
// LLVM: store ptr [[PTR_FIRST_ELEM]], ptr [[INIT_START_FLD_PTR]], align 8
86-
// LLVM: [[ELEM_ARRAY_END:%.*]] = getelementptr ptr, ptr [[PTR_FIRST_ELEM]], i64 2
86+
// LLVM: [[ELEM_ARRAY_END:%.*]] = getelementptr inbounds ptr, ptr [[PTR_FIRST_ELEM]], i64 2
8787
// LLVM: [[INIT_END_FLD_PTR:%.*]] = getelementptr %"class.std::initializer_list<const char *>", ptr [[INIT_STRUCT]], i32 0, i32 1
8888
// LLVM: store ptr [[ELEM_ARRAY_END]], ptr [[INIT_END_FLD_PTR]], align 8
8989
// LLVM: [[ARG2PASS:%.*]] = load %"class.std::initializer_list<const char *>", ptr [[INIT_STRUCT]], align 8

clang/test/CIR/CodeGen/pointer-arith-ext.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ void *f2(void *a, int b) { return a + b; }
1515
// LLVM: %[[PTR:.*]] = load ptr, ptr {{.*}}, align 8
1616
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
1717
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
18-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[STRIDE]]
18+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[STRIDE]]
1919

2020
// These test the same paths above, just make sure it does not crash.
2121
void *f2_0(void *a, int b) { return &a[b]; }
@@ -28,7 +28,7 @@ void *f3_1(int a, void *b) { return (a += b); }
2828
// CIR: cir.cast(ptr_to_int, %[[NEW_PTR]] : !cir.ptr<!void>), !s32i
2929

3030
// LLVM-LABEL: @f3_1
31-
// LLVM: %[[NEW_PTR:.*]] = getelementptr
31+
// LLVM: %[[NEW_PTR:.*]] = getelementptr inbounds
3232
// LLVM: ptrtoint ptr %[[NEW_PTR]] to i32
3333

3434
void *f4(void *a, int b) { return a - b; }
@@ -43,7 +43,7 @@ void *f4(void *a, int b) { return a - b; }
4343
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
4444
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
4545
// LLVM: %[[SUB:.*]] = sub i64 0, %[[STRIDE]]
46-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[SUB]]
46+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[SUB]]
4747

4848
// Similar to f4, just make sure it does not crash.
4949
void *f4_1(void *a, int b) { return (a -= b); }
@@ -58,7 +58,7 @@ FP f5(FP a, int b) { return a + b; }
5858
// LLVM: %[[PTR:.*]] = load ptr, ptr {{.*}}, align 8
5959
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
6060
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
61-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[STRIDE]]
61+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[STRIDE]]
6262

6363
// These test the same paths above, just make sure it does not crash.
6464
FP f5_1(FP a, int b) { return (a += b); }
@@ -77,7 +77,7 @@ FP f7(FP a, int b) { return a - b; }
7777
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
7878
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
7979
// LLVM: %[[SUB:.*]] = sub i64 0, %[[STRIDE]]
80-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[SUB]]
80+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[SUB]]
8181

8282
// Similar to f7, just make sure it does not crash.
8383
FP f7_1(FP a, int b) { return (a -= b); }
@@ -93,7 +93,7 @@ void f8(void *a, int b) { return *(a + b); }
9393
// LLVM: %[[PTR:.*]] = load ptr, ptr {{.*}}, align 8
9494
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
9595
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
96-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[STRIDE]]
96+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[STRIDE]]
9797
// LLVM: ret void
9898

9999
void f8_1(void *a, int b) { return a[b]; }
@@ -107,7 +107,7 @@ void f8_1(void *a, int b) { return a[b]; }
107107
// LLVM: %[[PTR:.*]] = load ptr, ptr {{.*}}, align 8
108108
// LLVM: %[[TOEXT:.*]] = load i32, ptr {{.*}}, align 4
109109
// LLVM: %[[STRIDE:.*]] = sext i32 %[[TOEXT]] to i64
110-
// LLVM: getelementptr i8, ptr %[[PTR]], i64 %[[STRIDE]]
110+
// LLVM: getelementptr inbounds i8, ptr %[[PTR]], i64 %[[STRIDE]]
111111
// LLVM: ret void
112112

113113
unsigned char *p(unsigned int x) {
@@ -121,4 +121,4 @@ unsigned char *p(unsigned int x) {
121121
// CIR: cir.ptr_stride({{.*}} : !cir.ptr<!u8i>, %[[SUB]] : !u32i), !cir.ptr<!u8i>
122122

123123
// LLVM-LABEL: @p
124-
// LLVM: getelementptr i8, ptr {{.*}}
124+
// LLVM: getelementptr inbounds i8, ptr {{.*}}

clang/test/CIR/CodeGen/ptr_stride.c

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %clang_cc1 -triple aarch64-none-linux-android21 -fclangir -emit-llvm %s -o %t.ll
2+
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
3+
4+
void foo(int *iptr) { iptr + 2; }
5+
6+
// LLVM: getelementptr inbounds

clang/test/CIR/CodeGen/var-arg-float.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ double f1(int n, ...) {
9797
// LLVM-NEXT: [[VR_TOP_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 2
9898
// LLVM-NEXT: [[VR_TOP:%.*]] = load ptr, ptr [[VR_TOP_P]], align 8
9999
// LLVM-NEXT: [[EXT64_VR_OFFS:%.*]] = sext i32 [[VR_OFFS]] to i64
100-
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr i8, ptr [[VR_TOP]], i64 [[EXT64_VR_OFFS]]
100+
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr inbounds i8, ptr [[VR_TOP]], i64 [[EXT64_VR_OFFS]]
101101
// LLVM-NEXT: br label %[[BB_END:.*]]
102102

103103
// LLVM: [[BB_ON_STACK]]: ;
104104
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
105105
// LLVM-NEXT: [[STACK_V:%.*]] = load ptr, ptr [[STACK_P]], align 8
106-
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr i8, ptr [[STACK_V]], i64 8
106+
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr inbounds i8, ptr [[STACK_V]], i64 8
107107
// LLVM-NEXT: store ptr [[NEW_STACK_V]], ptr [[STACK_P]], align 8
108108
// LLVM-NEXT: br label %[[BB_END]]
109109

clang/test/CIR/CodeGen/var-arg-scope.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ void f1(__builtin_va_list c) {
8686
// LLVM-NEXT: [[GR_TOP_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 1
8787
// LLVM-NEXT: [[GR_TOP:%.*]] = load ptr, ptr [[GR_TOP_P]], align 8
8888
// LLVM-NEXT: [[EXT64_GR_OFFS:%.*]] = sext i32 [[GR_OFFS]] to i64
89-
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr i8, ptr [[GR_TOP]], i64 [[EXT64_GR_OFFS]]
89+
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr inbounds i8, ptr [[GR_TOP]], i64 [[EXT64_GR_OFFS]]
9090
// LLVM-NEXT: br label %[[BB_END:.*]]
9191

9292
// LLVM: [[BB_ON_STACK]]: ;
9393
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
9494
// LLVM-NEXT: [[STACK_V:%.*]] = load ptr, ptr [[STACK_P]], align 8
95-
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr i8, ptr [[STACK_V]], i64 8
95+
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr inbounds i8, ptr [[STACK_V]], i64 8
9696
// LLVM-NEXT: store ptr [[NEW_STACK_V]], ptr [[STACK_P]], align 8
9797
// LLVM-NEXT: br label %[[BB_END]]
9898

clang/test/CIR/CodeGen/var-arg.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@ int f1(int n, ...) {
100100
// LLVM-NEXT: [[GR_TOP_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 1
101101
// LLVM-NEXT: [[GR_TOP:%.*]] = load ptr, ptr [[GR_TOP_P]], align 8
102102
// LLVM-NEXT: [[EXT64_GR_OFFS:%.*]] = sext i32 [[GR_OFFS]] to i64
103-
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr i8, ptr [[GR_TOP]], i64 [[EXT64_GR_OFFS]]
103+
// LLVM-NEXT: [[IN_REG_OUTPUT:%.*]] = getelementptr inbounds i8, ptr [[GR_TOP]], i64 [[EXT64_GR_OFFS]]
104104
// LLVM-NEXT: br label %[[BB_END:.*]]
105105

106106
// LLVM: [[BB_ON_STACK]]: ;
107107
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
108108
// LLVM-NEXT: [[STACK_V:%.*]] = load ptr, ptr [[STACK_P]], align 8
109-
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr i8, ptr [[STACK_V]], i64 8
109+
// LLVM-NEXT: [[NEW_STACK_V:%.*]] = getelementptr inbounds i8, ptr [[STACK_V]], i64 8
110110
// LLVM-NEXT: store ptr [[NEW_STACK_V]], ptr [[STACK_P]], align 8
111111
// LLVM-NEXT: br label %[[BB_END]]
112112

clang/test/CIR/CodeGen/virtual-base-cast.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ A* a() { return x; }
2525

2626
// FIXME: this version should include null check.
2727
// LLVM-LABEL: @_Z1av()
28-
// LLVM: %[[OFFSET_OFFSET:.*]] = getelementptr i8, ptr {{.*}}, i64 -32
28+
// LLVM: %[[OFFSET_OFFSET:.*]] = getelementptr inbounds i8, ptr {{.*}}, i64 -32
2929
// LLVM: %[[OFFSET_PTR:.*]] = load i64, ptr %[[OFFSET_OFFSET]], align 8
30-
// LLVM: %[[VBASE_ADDR:.*]] = getelementptr i8, ptr {{.*}}, i64 %[[OFFSET_PTR]]
30+
// LLVM: %[[VBASE_ADDR:.*]] = getelementptr inbounds i8, ptr {{.*}}, i64 %[[OFFSET_PTR]]
3131
// LLVM: store ptr %[[VBASE_ADDR]], ptr {{.*}}, align 8
3232

3333
B* b() { return x; }
@@ -46,8 +46,8 @@ BB* d() { return y; }
4646
// CIR: cir.binop(add, %[[OFFSET]], %[[ADJUST]]) : !s64i
4747

4848
// LLVM-LABEL: @_Z1dv
49-
// LLVM: %[[OFFSET_OFFSET:.*]] = getelementptr i8, ptr {{.*}}, i64 -48
49+
// LLVM: %[[OFFSET_OFFSET:.*]] = getelementptr inbounds i8, ptr {{.*}}, i64 -48
5050
// LLVM: %[[OFFSET_PTR:.*]] = load i64, ptr %[[OFFSET_OFFSET]], align 8
5151
// LLVM: %[[ADJUST:.*]] = add i64 %[[OFFSET_PTR]], 16
52-
// LLVM: %[[VBASE_ADDR:.*]] = getelementptr i8, ptr {{.*}}, i64 %[[ADJUST]]
52+
// LLVM: %[[VBASE_ADDR:.*]] = getelementptr inbounds i8, ptr {{.*}}, i64 %[[ADJUST]]
5353
// LLVM: store ptr %[[VBASE_ADDR]],

clang/test/CIR/Lowering/data-member.cir

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ module @test attributes {
4545
}
4646
// MLIR: llvm.func @get_runtime_member(%[[ARG0:.+]]: !llvm.ptr, %[[ARG1:.+]]: i64) -> !llvm.ptr
4747
// MLIR-NEXT: %[[#PTR:]] = llvm.bitcast %[[ARG0]] : !llvm.ptr to !llvm.ptr
48-
// MLIR-NEXT: %[[#VAL:]] = llvm.getelementptr %[[#PTR]][%[[ARG1]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8
48+
// MLIR-NEXT: %[[#VAL:]] = llvm.getelementptr inbounds %[[#PTR]][%[[ARG1]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8
4949
// MLIR-NEXT: %[[#RET:]] = llvm.bitcast %[[#VAL]] : !llvm.ptr to !llvm.ptr
5050
// MLIR-NEXT: llvm.return %[[#RET]] : !llvm.ptr
5151
// MLIR-NEXT: }
5252

5353
// LLVM: define ptr @get_runtime_member(ptr %[[ARG0:.+]], i64 %[[ARG1:.+]])
54-
// LLVM-NEXT: %[[#VAL:]] = getelementptr i8, ptr %[[ARG0]], i64 %[[ARG1]]
54+
// LLVM-NEXT: %[[#VAL:]] = getelementptr inbounds i8, ptr %[[ARG0]], i64 %[[ARG1]]
5555
// LLVM-NEXT: ret ptr %[[#VAL]]
5656
// LLVM-NEXT: }
5757
}

clang/test/CIR/Lowering/dot.cir

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ module {
8383
// MLIR: %[[VAL_23:.*]] = llvm.load %[[VAL_4]] {alignment = 8 : i64} : !llvm.ptr -> !llvm.ptr
8484
// MLIR: %[[VAL_24:.*]] = llvm.load %[[VAL_2]] {alignment = 4 : i64} : !llvm.ptr -> i32
8585
// MLIR: %[[VAL_25:.*]] = llvm.sext %[[VAL_24]] : i32 to i64
86-
// MLIR: %[[VAL_26:.*]] = llvm.getelementptr %[[VAL_23]]{{\[}}%[[VAL_25]]] : (!llvm.ptr, i64) -> !llvm.ptr, f64
86+
// MLIR: %[[VAL_26:.*]] = llvm.getelementptr inbounds %[[VAL_23]]{{\[}}%[[VAL_25]]] : (!llvm.ptr, i64) -> !llvm.ptr, f64
8787
// MLIR: %[[VAL_27:.*]] = llvm.load %[[VAL_26]] {alignment = 8 : i64} : !llvm.ptr -> f64
8888
// MLIR: %[[VAL_28:.*]] = llvm.load %[[VAL_6]] {alignment = 8 : i64} : !llvm.ptr -> !llvm.ptr
8989
// MLIR: %[[VAL_29:.*]] = llvm.load %[[VAL_2]] {alignment = 4 : i64} : !llvm.ptr -> i32
9090
// MLIR: %[[VAL_30:.*]] = llvm.sext %[[VAL_29]] : i32 to i64
91-
// MLIR: %[[VAL_31:.*]] = llvm.getelementptr %[[VAL_28]]{{\[}}%[[VAL_30]]] : (!llvm.ptr, i64) -> !llvm.ptr, f64
91+
// MLIR: %[[VAL_31:.*]] = llvm.getelementptr inbounds %[[VAL_28]]{{\[}}%[[VAL_30]]] : (!llvm.ptr, i64) -> !llvm.ptr, f64
9292
// MLIR: %[[VAL_32:.*]] = llvm.load %[[VAL_31]] {alignment = 8 : i64} : !llvm.ptr -> f64
9393
// MLIR: %[[VAL_33:.*]] = llvm.fmul %[[VAL_27]], %[[VAL_32]] : f64
9494
// MLIR: %[[VAL_34:.*]] = llvm.load %[[VAL_12]] {alignment = 8 : i64} : !llvm.ptr -> f64

clang/test/CIR/Lowering/globals.cir

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ module {
183183
//MLIR: %[[LOAD:.*]] = llvm.load {{.*}} {alignment = 4 : i64} : !llvm.ptr -> i32
184184
//MLIR: %[[RES6:.*]] = llvm.getelementptr %[[RES4]][0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
185185
//MLIR: %[[RES5:.*]] = llvm.sext %[[LOAD]] : i32 to i64
186-
//MLIR: %[[RES7:.*]] = llvm.getelementptr %[[RES6]][%[[RES5]]] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
186+
//MLIR: %[[RES7:.*]] = llvm.getelementptr inbounds %[[RES6]][%[[RES5]]] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
187187
//MLIR: %[[RES8:.*]] = llvm.getelementptr %[[RES7]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
188188
//MLIR: %[[RES9:.*]] = llvm.load %[[RES8]] {alignment = 8 : i64} : !llvm.ptr -> !llvm.ptr
189189
//MLIR: llvm.call %[[RES9]]({{.*}}) : !llvm.ptr, (i32) -> ()

clang/test/CIR/Lowering/ptrstride.cir

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ module {
2525
// MLIR: %[[VAL_3:.*]] = llvm.load %[[VAL_2]] {alignment = 8 : i64} : !llvm.ptr -> !llvm.ptr
2626
// MLIR: %[[VAL_4:.*]] = llvm.mlir.constant(1 : i32) : i32
2727
// MLIR: %[[VAL_5:.*]] = llvm.sext %[[VAL_4]] : i32 to i64
28-
// MLIR: %[[VAL_6:.*]] = llvm.getelementptr %[[VAL_3]]{{\[}}%[[VAL_5]]] : (!llvm.ptr, i64) -> !llvm.ptr, i32
28+
// MLIR: %[[VAL_6:.*]] = llvm.getelementptr inbounds %[[VAL_3]]{{\[}}%[[VAL_5]]] : (!llvm.ptr, i64) -> !llvm.ptr, i32
2929
// MLIR: %[[VAL_7:.*]] = llvm.load %[[VAL_6]] {alignment = 4 : i64} : !llvm.ptr -> i32
3030
// MLIR: llvm.return
3131

3232
// MLIR-LABEL: @g
3333
// MLIR: %0 = llvm.sext %arg1 : i32 to i64
34-
// MLIR-NEXT: llvm.getelementptr %arg0[%0] : (!llvm.ptr, i64) -> !llvm.ptr, i32
34+
// MLIR-NEXT: llvm.getelementptr inbounds %arg0[%0] : (!llvm.ptr, i64) -> !llvm.ptr, i32

clang/test/CIR/Lowering/var-arg-x86_64.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ long double f2(int n, ...) {
9494
// CHECK: [[OVERFLOW_AREA_P:%.+]] = getelementptr {{.*}} [[VA_LIST2]], i32 0, i32 2
9595
// CHECK: [[OVERFLOW_AREA:%.+]] = load ptr, ptr [[OVERFLOW_AREA_P]]
9696
// Ptr Mask Operations
97-
// CHECK: [[OVERFLOW_AREA_OFFSET_ALIGNED:%.+]] = getelementptr i8, ptr [[OVERFLOW_AREA]], i64 15
97+
// CHECK: [[OVERFLOW_AREA_OFFSET_ALIGNED:%.+]] = getelementptr inbounds i8, ptr [[OVERFLOW_AREA]], i64 15
9898
// CHECK: [[OVERFLOW_AREA_OFFSET_ALIGNED_P:%.+]] = ptrtoint ptr [[OVERFLOW_AREA_OFFSET_ALIGNED]] to i32
9999
// CHECK: [[MASKED:%.+]] = and i32 [[OVERFLOW_AREA_OFFSET_ALIGNED_P]], -16
100100
// CHECK: [[DIFF:%.+]] = sub i32 [[OVERFLOW_AREA_OFFSET_ALIGNED_P]], [[MASKED]]
101101
// CHECK: [[PTR_MASKED:%.+]] = getelementptr i8, ptr [[OVERFLOW_AREA_OFFSET_ALIGNED]], i32 [[DIFF]]
102-
// CHECK: [[OVERFLOW_AREA_NEXT:%.+]] = getelementptr i8, ptr [[PTR_MASKED]], i64 16
102+
// CHECK: [[OVERFLOW_AREA_NEXT:%.+]] = getelementptr inbounds i8, ptr [[PTR_MASKED]], i64 16
103103
// CHECK: store ptr [[OVERFLOW_AREA_NEXT]], ptr [[OVERFLOW_AREA_P]]
104104
// CHECK: [[VALUE:%.+]] = load x86_fp80, ptr [[PTR_MASKED]]
105105
// CHECK: store x86_fp80 [[VALUE]], ptr [[RES]]

0 commit comments

Comments
 (0)