Skip to content

Commit 9424519

Browse files
arichardsonresistor
authored andcommitted
[CHERI-Generic] Remove redundant bitcasts
No longer needed with opaque pointers.
1 parent c06024f commit 9424519

12 files changed

+47
-93
lines changed

llvm/test/CodeGen/CHERI-Generic/Inputs/gvn-capability-store-to-load-fwd.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,31 @@ target datalayout = "@PURECAP_DATALAYOUT@"
2222
define i32 @first_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_addr addrspace(200) nounwind {
2323
%stackval = alloca %struct.addrinfo, align @CAP_BYTES@, addrspace(200)
2424
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 0
25-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
26-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align @CAP_BYTES@
25+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align @CAP_BYTES@
2726
%result = load i32, ptr addrspace(200) %field, align 4
2827
ret i32 %result
2928
}
3029

3130
define i32 @second_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_addr addrspace(200) nounwind {
3231
%stackval = alloca %struct.addrinfo, align @CAP_BYTES@, addrspace(200)
3332
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 1
34-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
35-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align @CAP_BYTES@
33+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align @CAP_BYTES@
3634
%result = load i32, ptr addrspace(200) %field, align 4
3735
ret i32 %result
3836
}
3937

4038
define i32 @third_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_addr addrspace(200) nounwind {
4139
%stackval = alloca %struct.addrinfo, align @CAP_BYTES@, addrspace(200)
4240
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 2
43-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
44-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align @CAP_BYTES@
41+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align @CAP_BYTES@
4542
%result = load i32, ptr addrspace(200) %field, align 4
4643
ret i32 %result
4744
}
4845

4946
define i32 @fourth_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_addr addrspace(200) nounwind {
5047
%stackval = alloca %struct.addrinfo, align @CAP_BYTES@, addrspace(200)
5148
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 3
52-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
53-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align @CAP_BYTES@
49+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align @CAP_BYTES@
5450
%result = load i32, ptr addrspace(200) %field, align 4
5551
ret i32 %result
5652
}

llvm/test/CodeGen/CHERI-Generic/Inputs/machinelicm-hoist-csetbounds.ll

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ declare ptr addrspace(200) @llvm.cheri.cap.bounds.set.iCAPRANGE(ptr addrspace(20
3030
define dso_local void @hoist_csetbounds(i32 signext %cond, ptr addrspace(200) %f) local_unnamed_addr addrspace(200) nounwind {
3131
entry:
3232
%tobool = icmp eq ptr addrspace(200) %f, null
33-
%0 = bitcast ptr addrspace(200) %f to ptr addrspace(200)
3433
%dst = getelementptr inbounds %struct.foo, ptr addrspace(200) %f, i64 0, i32 1
35-
%1 = bitcast ptr addrspace(200) %dst to ptr addrspace(200)
3634
br label %for.body
3735

3836
for.cond.cleanup: ; preds = %for.inc
@@ -43,10 +41,8 @@ for.body: ; preds = %for.inc, %entry
4341
br i1 %tobool, label %for.inc, label %if.then
4442

4543
if.then: ; preds = %for.body
46-
%2 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.iCAPRANGE(ptr addrspace(200) nonnull %0, iCAPRANGE 4)
47-
%address.with.bounds = bitcast ptr addrspace(200) %2 to ptr addrspace(200)
48-
%3 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.iCAPRANGE(ptr addrspace(200) nonnull %1, iCAPRANGE 4)
49-
%address.with.bounds1 = bitcast ptr addrspace(200) %3 to ptr addrspace(200)
44+
%address.with.bounds = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.iCAPRANGE(ptr addrspace(200) nonnull %f, iCAPRANGE 4)
45+
%address.with.bounds1 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.iCAPRANGE(ptr addrspace(200) nonnull %dst, iCAPRANGE 4)
5046
call void @call(ptr addrspace(200) %address.with.bounds, ptr addrspace(200) %address.with.bounds1)
5147
br label %for.inc
5248

llvm/test/CodeGen/CHERI-Generic/Inputs/stack-bounds-dynamic-alloca.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ do_alloca: ; preds = %entry
2424
br label %use_alloca_no_bounds
2525

2626
use_alloca_no_bounds: ; preds = %do_alloca
27-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
28-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
27+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
2928
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
3029
br label %use_alloca_need_bounds
3130

@@ -47,8 +46,7 @@ do_alloca: ; preds = %entry
4746
br label %use_alloca_no_bounds
4847

4948
use_alloca_no_bounds: ; preds = %do_alloca
50-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
51-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
49+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
5250
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
5351
br label %use_alloca_need_bounds
5452

llvm/test/CodeGen/CHERI-Generic/MIPS/gvn-capability-store-to-load-fwd.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ define i32 @first_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_a
3939
;
4040
%stackval = alloca %struct.addrinfo, align 16, addrspace(200)
4141
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 0
42-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
43-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 16
42+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 16
4443
%result = load i32, ptr addrspace(200) %field, align 4
4544
ret i32 %result
4645
}
@@ -64,8 +63,7 @@ define i32 @second_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_
6463
;
6564
%stackval = alloca %struct.addrinfo, align 16, addrspace(200)
6665
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 1
67-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
68-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 16
66+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 16
6967
%result = load i32, ptr addrspace(200) %field, align 4
7068
ret i32 %result
7169
}
@@ -89,8 +87,7 @@ define i32 @third_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_a
8987
;
9088
%stackval = alloca %struct.addrinfo, align 16, addrspace(200)
9189
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 2
92-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
93-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 16
90+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 16
9491
%result = load i32, ptr addrspace(200) %field, align 4
9592
ret i32 %result
9693
}
@@ -114,8 +111,7 @@ define i32 @fourth_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_
114111
;
115112
%stackval = alloca %struct.addrinfo, align 16, addrspace(200)
116113
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 3
117-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
118-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 16
114+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 16
119115
%result = load i32, ptr addrspace(200) %field, align 4
120116
ret i32 %result
121117
}

llvm/test/CodeGen/CHERI-Generic/MIPS/machinelicm-hoist-csetbounds.ll

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,20 @@ define dso_local void @hoist_csetbounds(i32 signext %cond, ptr addrspace(200) %f
7878
; HOIST-OPT-NEXT: br i1 [[TOBOOL]], label [[FOR_COND_CLEANUP:%.*]], label [[ENTRY_SPLIT:%.*]]
7979
; HOIST-OPT: entry.split:
8080
; HOIST-OPT-NEXT: [[DST:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(200) [[F]], i64 4
81-
; HOIST-OPT-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull [[F]], i64 4)
82-
; HOIST-OPT-NEXT: [[TMP1:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull [[DST]], i64 4)
81+
; HOIST-OPT-NEXT: [[ADDRESS_WITH_BOUNDS:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull [[F]], i64 4)
82+
; HOIST-OPT-NEXT: [[ADDRESS_WITH_BOUNDS1:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull [[DST]], i64 4)
8383
; HOIST-OPT-NEXT: br label [[FOR_BODY:%.*]]
8484
; HOIST-OPT: for.cond.cleanup:
8585
; HOIST-OPT-NEXT: ret void
8686
; HOIST-OPT: for.body:
8787
; HOIST-OPT-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
88-
; HOIST-OPT-NEXT: tail call void @call(ptr addrspace(200) [[TMP0]], ptr addrspace(200) [[TMP1]])
88+
; HOIST-OPT-NEXT: tail call void @call(ptr addrspace(200) [[ADDRESS_WITH_BOUNDS]], ptr addrspace(200) [[ADDRESS_WITH_BOUNDS1]])
8989
; HOIST-OPT-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
9090
; HOIST-OPT-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 100
9191
; HOIST-OPT-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
9292
entry:
9393
%tobool = icmp eq ptr addrspace(200) %f, null
94-
%0 = bitcast ptr addrspace(200) %f to ptr addrspace(200)
9594
%dst = getelementptr inbounds %struct.foo, ptr addrspace(200) %f, i64 0, i32 1
96-
%1 = bitcast ptr addrspace(200) %dst to ptr addrspace(200)
9795
br label %for.body
9896

9997
for.cond.cleanup: ; preds = %for.inc
@@ -104,10 +102,8 @@ for.body: ; preds = %for.inc, %entry
104102
br i1 %tobool, label %for.inc, label %if.then
105103

106104
if.then: ; preds = %for.body
107-
%2 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull %0, i64 4)
108-
%address.with.bounds = bitcast ptr addrspace(200) %2 to ptr addrspace(200)
109-
%3 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull %1, i64 4)
110-
%address.with.bounds1 = bitcast ptr addrspace(200) %3 to ptr addrspace(200)
105+
%address.with.bounds = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull %f, i64 4)
106+
%address.with.bounds1 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i64(ptr addrspace(200) nonnull %dst, i64 4)
111107
call void @call(ptr addrspace(200) %address.with.bounds, ptr addrspace(200) %address.with.bounds1)
112108
br label %for.inc
113109

llvm/test/CodeGen/CHERI-Generic/MIPS/stack-bounds-dynamic-alloca.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ define i32 @alloca_in_entry(i1 %arg) local_unnamed_addr addrspace(200) nounwind
8787
; CHECK: do_alloca:
8888
; CHECK-NEXT: br label [[USE_ALLOCA_NO_BOUNDS:%.*]]
8989
; CHECK: use_alloca_no_bounds:
90-
; CHECK-NEXT: [[PTR:%.*]] = bitcast ptr addrspace(200) [[ALLOCA]] to ptr addrspace(200)
91-
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[PTR]], i64 1
90+
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[ALLOCA]], i64 1
9291
; CHECK-NEXT: store i64 1234, ptr addrspace(200) [[PTR_PLUS_ONE]], align 8
9392
; CHECK-NEXT: br label [[USE_ALLOCA_NEED_BOUNDS:%.*]]
9493
; CHECK: use_alloca_need_bounds:
@@ -107,8 +106,7 @@ do_alloca: ; preds = %entry
107106
br label %use_alloca_no_bounds
108107

109108
use_alloca_no_bounds: ; preds = %do_alloca
110-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
111-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
109+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
112110
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
113111
br label %use_alloca_need_bounds
114112

@@ -213,8 +211,7 @@ define i32 @alloca_not_in_entry(i1 %arg) local_unnamed_addr addrspace(200) nounw
213211
; CHECK-NEXT: [[TMP0:%.*]] = call ptr addrspace(200) @llvm.cheri.bounded.stack.cap.dynamic.i64(ptr addrspace(200) [[ALLOCA]], i64 16)
214212
; CHECK-NEXT: br label [[USE_ALLOCA_NO_BOUNDS:%.*]]
215213
; CHECK: use_alloca_no_bounds:
216-
; CHECK-NEXT: [[PTR:%.*]] = bitcast ptr addrspace(200) [[ALLOCA]] to ptr addrspace(200)
217-
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[PTR]], i64 1
214+
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[ALLOCA]], i64 1
218215
; CHECK-NEXT: store i64 1234, ptr addrspace(200) [[PTR_PLUS_ONE]], align 8
219216
; CHECK-NEXT: br label [[USE_ALLOCA_NEED_BOUNDS:%.*]]
220217
; CHECK: use_alloca_need_bounds:
@@ -232,8 +229,7 @@ do_alloca: ; preds = %entry
232229
br label %use_alloca_no_bounds
233230

234231
use_alloca_no_bounds: ; preds = %do_alloca
235-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
236-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
232+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
237233
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
238234
br label %use_alloca_need_bounds
239235

llvm/test/CodeGen/CHERI-Generic/RISCV32/gvn-capability-store-to-load-fwd.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ define i32 @first_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_a
3838
;
3939
%stackval = alloca %struct.addrinfo, align 8, addrspace(200)
4040
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 0
41-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
42-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 8
41+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 8
4342
%result = load i32, ptr addrspace(200) %field, align 4
4443
ret i32 %result
4544
}
@@ -62,8 +61,7 @@ define i32 @second_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_
6261
;
6362
%stackval = alloca %struct.addrinfo, align 8, addrspace(200)
6463
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 1
65-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
66-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 8
64+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 8
6765
%result = load i32, ptr addrspace(200) %field, align 4
6866
ret i32 %result
6967
}
@@ -85,8 +83,7 @@ define i32 @third_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_a
8583
;
8684
%stackval = alloca %struct.addrinfo, align 8, addrspace(200)
8785
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 2
88-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
89-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 8
86+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 8
9087
%result = load i32, ptr addrspace(200) %field, align 4
9188
ret i32 %result
9289
}
@@ -108,8 +105,7 @@ define i32 @fourth_i32_store_to_load_fwd(ptr addrspace(200) %arg) local_unnamed_
108105
;
109106
%stackval = alloca %struct.addrinfo, align 8, addrspace(200)
110107
%field = getelementptr inbounds %struct.addrinfo, ptr addrspace(200) %stackval, i64 0, i32 3
111-
%as_cap = bitcast ptr addrspace(200) %stackval to ptr addrspace(200)
112-
store ptr addrspace(200) %arg, ptr addrspace(200) %as_cap, align 8
108+
store ptr addrspace(200) %arg, ptr addrspace(200) %stackval, align 8
113109
%result = load i32, ptr addrspace(200) %field, align 4
114110
ret i32 %result
115111
}

llvm/test/CodeGen/CHERI-Generic/RISCV32/machinelicm-hoist-csetbounds.ll

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,21 @@ define dso_local void @hoist_csetbounds(i32 signext %cond, ptr addrspace(200) %f
7171
; HOIST-OPT-NEXT: br i1 [[TOBOOL]], label [[FOR_COND_CLEANUP:%.*]], label [[ENTRY_SPLIT:%.*]]
7272
; HOIST-OPT: entry.split:
7373
; HOIST-OPT-NEXT: [[DST:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(200) [[F]], i32 4
74-
; HOIST-OPT-NEXT: [[TMP0:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull [[F]], i32 4)
75-
; HOIST-OPT-NEXT: [[TMP1:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull [[DST]], i32 4)
74+
; HOIST-OPT-NEXT: [[ADDRESS_WITH_BOUNDS:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull [[F]], i32 4)
75+
; HOIST-OPT-NEXT: [[ADDRESS_WITH_BOUNDS1:%.*]] = tail call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull [[DST]], i32 4)
7676
; HOIST-OPT-NEXT: br label [[FOR_BODY:%.*]]
7777
; HOIST-OPT: for.cond.cleanup:
7878
; HOIST-OPT-NEXT: ret void
7979
; HOIST-OPT: for.body:
8080
; HOIST-OPT-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
81-
; HOIST-OPT-NEXT: tail call void @call(ptr addrspace(200) [[TMP0]], ptr addrspace(200) [[TMP1]])
81+
; HOIST-OPT-NEXT: tail call void @call(ptr addrspace(200) [[ADDRESS_WITH_BOUNDS]], ptr addrspace(200) [[ADDRESS_WITH_BOUNDS1]])
8282
; HOIST-OPT-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
8383
; HOIST-OPT-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 100
8484
; HOIST-OPT-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
8585
;
8686
entry:
8787
%tobool = icmp eq ptr addrspace(200) %f, null
88-
%0 = bitcast ptr addrspace(200) %f to ptr addrspace(200)
8988
%dst = getelementptr inbounds %struct.foo, ptr addrspace(200) %f, i64 0, i32 1
90-
%1 = bitcast ptr addrspace(200) %dst to ptr addrspace(200)
9189
br label %for.body
9290

9391
for.cond.cleanup: ; preds = %for.inc
@@ -98,10 +96,8 @@ for.body: ; preds = %for.inc, %entry
9896
br i1 %tobool, label %for.inc, label %if.then
9997

10098
if.then: ; preds = %for.body
101-
%2 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull %0, i32 4)
102-
%address.with.bounds = bitcast ptr addrspace(200) %2 to ptr addrspace(200)
103-
%3 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull %1, i32 4)
104-
%address.with.bounds1 = bitcast ptr addrspace(200) %3 to ptr addrspace(200)
99+
%address.with.bounds = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull %f, i32 4)
100+
%address.with.bounds1 = call ptr addrspace(200) @llvm.cheri.cap.bounds.set.i32(ptr addrspace(200) nonnull %dst, i32 4)
105101
call void @call(ptr addrspace(200) %address.with.bounds, ptr addrspace(200) %address.with.bounds1)
106102
br label %for.inc
107103

llvm/test/CodeGen/CHERI-Generic/RISCV32/stack-bounds-dynamic-alloca.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ define i32 @alloca_in_entry(i1 %arg) local_unnamed_addr addrspace(200) nounwind
7070
; CHECK: do_alloca:
7171
; CHECK-NEXT: br label [[USE_ALLOCA_NO_BOUNDS:%.*]]
7272
; CHECK: use_alloca_no_bounds:
73-
; CHECK-NEXT: [[PTR:%.*]] = bitcast ptr addrspace(200) [[ALLOCA]] to ptr addrspace(200)
74-
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[PTR]], i64 1
73+
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[ALLOCA]], i64 1
7574
; CHECK-NEXT: store i64 1234, ptr addrspace(200) [[PTR_PLUS_ONE]], align 8
7675
; CHECK-NEXT: br label [[USE_ALLOCA_NEED_BOUNDS:%.*]]
7776
; CHECK: use_alloca_need_bounds:
@@ -90,8 +89,7 @@ do_alloca: ; preds = %entry
9089
br label %use_alloca_no_bounds
9190

9291
use_alloca_no_bounds: ; preds = %do_alloca
93-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
94-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
92+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
9593
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
9694
br label %use_alloca_need_bounds
9795

@@ -179,8 +177,7 @@ define i32 @alloca_not_in_entry(i1 %arg) local_unnamed_addr addrspace(200) nounw
179177
; CHECK-NEXT: [[TMP0:%.*]] = call ptr addrspace(200) @llvm.cheri.bounded.stack.cap.dynamic.i32(ptr addrspace(200) [[ALLOCA]], i32 16)
180178
; CHECK-NEXT: br label [[USE_ALLOCA_NO_BOUNDS:%.*]]
181179
; CHECK: use_alloca_no_bounds:
182-
; CHECK-NEXT: [[PTR:%.*]] = bitcast ptr addrspace(200) [[ALLOCA]] to ptr addrspace(200)
183-
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[PTR]], i64 1
180+
; CHECK-NEXT: [[PTR_PLUS_ONE:%.*]] = getelementptr i64, ptr addrspace(200) [[ALLOCA]], i64 1
184181
; CHECK-NEXT: store i64 1234, ptr addrspace(200) [[PTR_PLUS_ONE]], align 8
185182
; CHECK-NEXT: br label [[USE_ALLOCA_NEED_BOUNDS:%.*]]
186183
; CHECK: use_alloca_need_bounds:
@@ -198,8 +195,7 @@ do_alloca: ; preds = %entry
198195
br label %use_alloca_no_bounds
199196

200197
use_alloca_no_bounds: ; preds = %do_alloca
201-
%ptr = bitcast ptr addrspace(200) %alloca to ptr addrspace(200)
202-
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %ptr, i64 1
198+
%ptr_plus_one = getelementptr i64, ptr addrspace(200) %alloca, i64 1
203199
store i64 1234, ptr addrspace(200) %ptr_plus_one, align 8
204200
br label %use_alloca_need_bounds
205201

0 commit comments

Comments
 (0)