Skip to content

Commit 17d944f

Browse files
committed
Revert "[CIR][LowerToLLVM] fixup! GEP with a constant offset should have inbounds attribute"
This reverts commit 4e05834.
1 parent 4e05834 commit 17d944f

File tree

8 files changed

+45
-47
lines changed

8 files changed

+45
-47
lines changed

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

+14-16
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ lowerCirAttrAsValue(mlir::Operation *parentOp, cir::GlobalViewAttr globalAttr,
607607
auto resTy = addrOp.getType();
608608
auto eltTy = converter->convertType(sourceType);
609609
addrOp = rewriter.create<mlir::LLVM::GEPOp>(loc, resTy, eltTy, addrOp,
610-
indices, /*inbounds*/ true);
610+
indices, true);
611611
}
612612

613613
auto ptrTy = mlir::dyn_cast<cir::PointerType>(globalAttr.getType());
@@ -853,7 +853,7 @@ mlir::LogicalResult CIRToLLVMPtrStrideOpLowering::matchAndRewrite(
853853

854854
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(ptrStrideOp, resultTy,
855855
elementTy, adaptor.getBase(),
856-
index, /*inbounds*/ true);
856+
index, /*inbounds=*/true);
857857
return mlir::success();
858858
}
859859

@@ -874,9 +874,8 @@ mlir::LogicalResult CIRToLLVMBaseClassAddrOpLowering::matchAndRewrite(
874874
}
875875

876876
if (baseClassOp.getAssumeNotNull()) {
877-
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(baseClassOp, resultType,
878-
byteType, derivedAddr,
879-
offset, /*inbounds*/ true);
877+
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
878+
baseClassOp, resultType, byteType, derivedAddr, offset);
880879
} else {
881880
auto loc = baseClassOp.getLoc();
882881
mlir::Value isNull = rewriter.create<mlir::LLVM::ICmpOp>(
@@ -902,8 +901,7 @@ mlir::LogicalResult CIRToLLVMDerivedClassAddrOpLowering::matchAndRewrite(
902901
mlir::IntegerType::Signless);
903902
if (derivedClassOp.getAssumeNotNull()) {
904903
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(derivedClassOp, resultType,
905-
byteType, baseAddr, offset,
906-
/*inbounds*/ true);
904+
byteType, baseAddr, offset);
907905
} else {
908906
auto loc = derivedClassOp.getLoc();
909907
mlir::Value isNull = rewriter.create<mlir::LLVM::ICmpOp>(
@@ -977,8 +975,8 @@ mlir::LogicalResult CIRToLLVMVTTAddrPointOpLowering::matchAndRewrite(
977975
offsets.push_back(0);
978976
offsets.push_back(adaptor.getOffset());
979977
}
980-
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
981-
op, resultType, eltType, llvmAddr, offsets, /*inbounds*/ true);
978+
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(op, resultType, eltType,
979+
llvmAddr, offsets, true);
982980
return mlir::success();
983981
}
984982

@@ -1035,7 +1033,7 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
10351033
auto elementTy = convertTy(ptrTy.getPointee());
10361034
auto offset = llvm::SmallVector<mlir::LLVM::GEPArg>{0};
10371035
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
1038-
castOp, targetType, elementTy, sourceValue, offset, /*inbounds*/ true);
1036+
castOp, targetType, elementTy, sourceValue, offset);
10391037
break;
10401038
}
10411039
case cir::CastKind::int_to_bool: {
@@ -3239,8 +3237,8 @@ mlir::LogicalResult CIRToLLVMGetMemberOpLowering::matchAndRewrite(
32393237
// is always zero. The second offset tell us which member it will access.
32403238
llvm::SmallVector<mlir::LLVM::GEPArg, 2> offset{0, op.getIndex()};
32413239
const auto elementTy = getTypeConverter()->convertType(structTy);
3242-
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
3243-
op, llResTy, elementTy, adaptor.getAddr(), offset, /*inbounds*/ true);
3240+
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(op, llResTy, elementTy,
3241+
adaptor.getAddr(), offset);
32443242
return mlir::success();
32453243
}
32463244
case cir::StructType::Union:
@@ -3340,8 +3338,8 @@ mlir::LogicalResult CIRToLLVMVTableAddrPointOpLowering::matchAndRewrite(
33403338
}
33413339

33423340
assert(eltType && "Shouldn't ever be missing an eltType here");
3343-
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
3344-
op, targetType, eltType, symAddr, offsets, /*inbounds*/ true);
3341+
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(op, targetType, eltType,
3342+
symAddr, offsets, true);
33453343

33463344
return mlir::success();
33473345
}
@@ -3840,8 +3838,8 @@ mlir::LogicalResult CIRToLLVMPtrMaskOpLowering::matchAndRewrite(
38403838
mlir::Value diff = rewriter.create<mlir::LLVM::SubOp>(loc, intPtr, masked);
38413839
rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(
38423840
op, getTypeConverter()->convertType(op.getType()),
3843-
mlir::IntegerType::get(moduleOp->getContext(), 8), adaptor.getPtr(), diff,
3844-
/*inbounds*/ true);
3841+
mlir::IntegerType::get(moduleOp->getContext(), 8), adaptor.getPtr(),
3842+
diff);
38453843
return mlir::success();
38463844
}
38473845

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,14 @@ void test() {
7777
// LLVM: [[ELEM_ARRAY_PTR:%.*]] = alloca [2 x ptr], i64 1, align 8
7878
// LLVM: br label %[[SCOPE_START:.*]]
7979
// LLVM: [[SCOPE_START]]: ; preds = %0
80-
// LLVM: [[PTR_FIRST_ELEM:%.*]] = getelementptr inbounds ptr, ptr [[ELEM_ARRAY_PTR]], i32 0
80+
// LLVM: [[PTR_FIRST_ELEM:%.*]] = getelementptr ptr, ptr [[ELEM_ARRAY_PTR]], i32 0
8181
// LLVM: store ptr @.str, ptr [[PTR_FIRST_ELEM]], align 8
8282
// 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
84-
// LLVM: [[INIT_START_FLD_PTR:%.*]] = getelementptr inbounds %"class.std::initializer_list<const char *>", ptr [[INIT_STRUCT]], i32 0, i32 0
84+
// 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
8686
// LLVM: [[ELEM_ARRAY_END:%.*]] = getelementptr inbounds ptr, ptr [[PTR_FIRST_ELEM]], i64 2
87-
// LLVM: [[INIT_END_FLD_PTR:%.*]] = getelementptr inbounds %"class.std::initializer_list<const char *>", ptr [[INIT_STRUCT]], i32 0, i32 1
87+
// 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
9090
// LLVM: call void @_ZSt1fIPKcEvSt16initializer_listIT_E(%"class.std::initializer_list<const char *>" [[ARG2PASS]])

clang/test/CIR/CodeGen/inbouds.c clang/test/CIR/CodeGen/ptr_stride.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33

44
void foo(int *iptr) { iptr + 2; }
55

6-
// LLVM: getelementptr inbounds i32,
6+
// LLVM: getelementptr inbounds

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ double f1(int n, ...) {
8282
// LLVM: [[RETP:%.*]] = alloca double, i64 1, align 8
8383
// LLVM: [[RESP:%.*]] = alloca double, i64 1, align 8
8484
// LLVM: call void @llvm.va_start.p0(ptr [[VARLIST:%.*]])
85-
// LLVM: [[VR_OFFS_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 4
85+
// LLVM: [[VR_OFFS_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 4
8686
// LLVM: [[VR_OFFS:%.*]] = load i32, ptr [[VR_OFFS_P]], align 4
8787
// LLVM-NEXT: [[CMP0:%.*]] = icmp sge i32 [[VR_OFFS]], 0
8888
// LLVM-NEXT: br i1 [[CMP0]], label %[[BB_ON_STACK:.*]], label %[[BB_MAY_REG:.*]]
@@ -94,14 +94,14 @@ double f1(int n, ...) {
9494
// LLVM-NEXT: br i1 [[CMP1]], label %[[BB_IN_REG:.*]], label %[[BB_ON_STACK]]
9595

9696
// LLVM: [[BB_IN_REG]]: ;
97-
// LLVM-NEXT: [[VR_TOP_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 2
97+
// 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
100100
// 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]]: ;
104-
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
104+
// 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
106106
// 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

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void f1(__builtin_va_list c) {
7171
// LLVM: br label %[[SCOPE_FRONT:.*]]
7272

7373
// LLVM: [[SCOPE_FRONT]]: ; preds = %1
74-
// LLVM: [[GR_OFFS_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 3
74+
// LLVM: [[GR_OFFS_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 3
7575
// LLVM: [[GR_OFFS:%.*]] = load i32, ptr [[GR_OFFS_P]], align 4
7676
// LLVM-NEXT: [[CMP0:%.*]] = icmp sge i32 [[GR_OFFS]], 0
7777
// LLVM-NEXT: br i1 [[CMP0]], label %[[BB_ON_STACK:.*]], label %[[BB_MAY_REG:.*]]
@@ -83,14 +83,14 @@ void f1(__builtin_va_list c) {
8383
// LLVM-NEXT: br i1 [[CMP1]], label %[[BB_IN_REG:.*]], label %[[BB_ON_STACK]]
8484

8585
// LLVM: [[BB_IN_REG]]: ;
86-
// LLVM-NEXT: [[GR_TOP_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 1
86+
// 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
8989
// 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]]: ;
93-
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
93+
// 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
9595
// 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

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ int f1(int n, ...) {
8585
// LLVM: [[RETP:%.*]] = alloca i32, i64 1, align 4
8686
// LLVM: [[RESP:%.*]] = alloca i32, i64 1, align 4
8787
// LLVM: call void @llvm.va_start.p0(ptr [[VARLIST:%.*]])
88-
// LLVM: [[GR_OFFS_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 3
88+
// LLVM: [[GR_OFFS_P:%.*]] = getelementptr %struct.__va_list, ptr [[VARLIST]], i32 0, i32 3
8989
// LLVM: [[GR_OFFS:%.*]] = load i32, ptr [[GR_OFFS_P]], align 4
9090
// LLVM-NEXT: [[CMP0:%.*]] = icmp sge i32 [[GR_OFFS]], 0
9191
// LLVM-NEXT: br i1 [[CMP0]], label %[[BB_ON_STACK:.*]], label %[[BB_MAY_REG:.*]]
@@ -97,14 +97,14 @@ int f1(int n, ...) {
9797
// LLVM-NEXT: br i1 [[CMP1]], label %[[BB_IN_REG:.*]], label %[[BB_ON_STACK]]
9898

9999
// LLVM: [[BB_IN_REG]]: ;
100-
// LLVM-NEXT: [[GR_TOP_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 1
100+
// 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
103103
// 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]]: ;
107-
// LLVM-NEXT: [[STACK_P:%.*]] = getelementptr inbounds %struct.__va_list, ptr [[VARLIST]], i32 0, i32 0
107+
// 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
109109
// 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

clang/test/CIR/Lowering/globals.cir

+7-7
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,27 @@ module {
107107
%5 = cir.get_global @string : !cir.ptr<!cir.array<!s8i x 8>>
108108
%6 = cir.cast(array_to_ptrdecay, %5 : !cir.ptr<!cir.array<!s8i x 8>>), !cir.ptr<!s8i>
109109
// MLIR: %[[RES:[0-9]+]] = llvm.mlir.addressof @string : !llvm.ptr
110-
// MLIR: %{{[0-9]+}} = llvm.getelementptr inbounds %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i8
110+
// MLIR: %{{[0-9]+}} = llvm.getelementptr %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i8
111111
cir.store %6, %0 : !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>
112112
%7 = cir.get_global @uint : !cir.ptr<!cir.array<!u32i x 1>>
113113
%8 = cir.cast(array_to_ptrdecay, %7 : !cir.ptr<!cir.array<!u32i x 1>>), !cir.ptr<!u32i>
114114
// MLIR: %[[RES:[0-9]+]] = llvm.mlir.addressof @uint : !llvm.ptr
115-
// MLIR: %{{[0-9]+}} = llvm.getelementptr inbounds %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i32
115+
// MLIR: %{{[0-9]+}} = llvm.getelementptr %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i32
116116
cir.store %8, %1 : !cir.ptr<!u32i>, !cir.ptr<!cir.ptr<!u32i>>
117117
%9 = cir.get_global @sshort : !cir.ptr<!cir.array<!s16i x 2>>
118118
%10 = cir.cast(array_to_ptrdecay, %9 : !cir.ptr<!cir.array<!s16i x 2>>), !cir.ptr<!s16i>
119119
// MLIR: %[[RES:[0-9]+]] = llvm.mlir.addressof @sshort : !llvm.ptr
120-
// MLIR: %{{[0-9]+}} = llvm.getelementptr inbounds %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i16
120+
// MLIR: %{{[0-9]+}} = llvm.getelementptr %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i16
121121
cir.store %10, %2 : !cir.ptr<!s16i>, !cir.ptr<!cir.ptr<!s16i>>
122122
%11 = cir.get_global @sint : !cir.ptr<!cir.array<!s32i x 3>>
123123
%12 = cir.cast(array_to_ptrdecay, %11 : !cir.ptr<!cir.array<!s32i x 3>>), !cir.ptr<!s32i>
124124
// MLIR: %[[RES:[0-9]+]] = llvm.mlir.addressof @sint : !llvm.ptr
125-
// MLIR: %{{[0-9]+}} = llvm.getelementptr inbounds %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i32
125+
// MLIR: %{{[0-9]+}} = llvm.getelementptr %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i32
126126
cir.store %12, %3 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
127127
%13 = cir.get_global @ll : !cir.ptr<!cir.array<!s64i x 4>>
128128
%14 = cir.cast(array_to_ptrdecay, %13 : !cir.ptr<!cir.array<!s64i x 4>>), !cir.ptr<!s64i>
129129
// MLIR: %[[RES:[0-9]+]] = llvm.mlir.addressof @ll : !llvm.ptr
130-
// MLIR: %{{[0-9]+}} = llvm.getelementptr inbounds %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i64
130+
// MLIR: %{{[0-9]+}} = llvm.getelementptr %[[RES]][0] : (!llvm.ptr) -> !llvm.ptr, i64
131131
cir.store %14, %4 : !cir.ptr<!s64i>, !cir.ptr<!cir.ptr<!s64i>>
132132
cir.return
133133
}
@@ -181,10 +181,10 @@ module {
181181
//MLIR-LABEL: @foo
182182
//MLIR: %[[RES4:.*]] = llvm.mlir.addressof @Handlers : !llvm.ptr
183183
//MLIR: %[[LOAD:.*]] = llvm.load {{.*}} {alignment = 4 : i64} : !llvm.ptr -> i32
184-
//MLIR: %[[RES6:.*]] = llvm.getelementptr inbounds %[[RES4]][0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
184+
//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
186186
//MLIR: %[[RES7:.*]] = llvm.getelementptr inbounds %[[RES6]][%[[RES5]]] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
187-
//MLIR: %[[RES8:.*]] = llvm.getelementptr inbounds %[[RES7]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"struct.anon.1", (ptr)>
187+
//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) -> ()
190190

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ double f1(int n, ...) {
1717

1818
// CHECK: define {{.*}}@f1
1919
// CHECK: [[VA_LIST_ALLOCA:%.+]] = alloca {{.*}}[[VA_LIST_TYPE]]
20-
// CHECK: [[VA_LIST:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
20+
// CHECK: [[VA_LIST:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
2121
// CHECK: call {{.*}}@llvm.va_start.p0(ptr [[VA_LIST]])
22-
// CHECK: [[VA_LIST2:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
23-
// CHECK: [[FP_OFFSET_P:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST2]], i32 0, i32 1
22+
// CHECK: [[VA_LIST2:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
23+
// CHECK: [[FP_OFFSET_P:%.+]] = getelementptr {{.*}} [[VA_LIST2]], i32 0, i32 1
2424
// CHECK: [[FP_OFFSET:%.+]] = load {{.*}}, ptr [[FP_OFFSET_P]]
2525
// CHECK: [[COMPARED:%.+]] = icmp ule i32 {{.*}}, 160
2626
// CHECK: br i1 [[COMPARED]], label %[[THEN_BB:.+]], label %[[ELSE_BB:.+]]
@@ -31,14 +31,14 @@ double f1(int n, ...) {
3131
// CHECK: br label %[[CONT_BB:.+]]
3232
//
3333
// CHECK: [[ELSE_BB]]:
34-
// CHECK: [[OVERFLOW_ARG_AREA_ADDR:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST2]], i32 0, i32 2
34+
// CHECK: [[OVERFLOW_ARG_AREA_ADDR:%.+]] = getelementptr {{.*}} [[VA_LIST2]], i32 0, i32 2
3535
// CHECK: [[OVERFLOW_ARG_AREA:%.+]] = load ptr, ptr [[OVERFLOW_ARG_AREA_ADDR]]
36-
// CHECK: [[OVERFLOW_ARG_AREA_OFFSET:%.+]] = getelementptr inbounds {{.*}} [[OVERFLOW_ARG_AREA]], i64 8
36+
// CHECK: [[OVERFLOW_ARG_AREA_OFFSET:%.+]] = getelementptr {{.*}} [[OVERFLOW_ARG_AREA]], i64 8
3737
// CHECK: store ptr [[OVERFLOW_ARG_AREA_OFFSET]], ptr [[OVERFLOW_ARG_AREA_ADDR]]
3838
// CHECK: br label %[[CONT_BB]]
3939
//
4040
// CHECK: [[CONT_BB]]:
41-
// CHECK: [[VA_LIST3:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
41+
// CHECK: [[VA_LIST3:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
4242
// CHECK: call {{.*}}@llvm.va_end.p0(ptr [[VA_LIST3]])
4343

4444
// CIR: cir.func @f1
@@ -88,22 +88,22 @@ long double f2(int n, ...) {
8888
// CHECK: [[RESULT:%.+]] = alloca x86_fp80
8989
// CHECK: [[VA_LIST_ALLOCA:%.+]] = alloca {{.*}}[[VA_LIST_TYPE]]
9090
// CHECK: [[RES:%.+]] = alloca x86_fp80
91-
// CHECK: [[VA_LIST:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
91+
// CHECK: [[VA_LIST:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
9292
// CHECK: call {{.*}}@llvm.va_start.p0(ptr [[VA_LIST]])
93-
// CHECK: [[VA_LIST2:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
94-
// CHECK: [[OVERFLOW_AREA_P:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST2]], i32 0, i32 2
93+
// CHECK: [[VA_LIST2:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
94+
// 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
9797
// 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]]
101-
// CHECK: [[PTR_MASKED:%.+]] = getelementptr inbounds i8, ptr [[OVERFLOW_AREA_OFFSET_ALIGNED]], i32 [[DIFF]]
101+
// CHECK: [[PTR_MASKED:%.+]] = getelementptr i8, ptr [[OVERFLOW_AREA_OFFSET_ALIGNED]], i32 [[DIFF]]
102102
// 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]]
106-
// CHECK: [[VA_LIST2:%.+]] = getelementptr inbounds {{.*}} [[VA_LIST_ALLOCA]], i32 0
106+
// CHECK: [[VA_LIST2:%.+]] = getelementptr {{.*}} [[VA_LIST_ALLOCA]], i32 0
107107
// CHECK: call {{.*}}@llvm.va_end.p0(ptr [[VA_LIST2]])
108108
// CHECK: [[VALUE2:%.+]] = load x86_fp80, ptr [[RES]]
109109
// CHECK: store x86_fp80 [[VALUE2]], ptr [[RESULT]]

0 commit comments

Comments
 (0)