Skip to content

Commit 783201b

Browse files
authored
Attributor: Don't follow uses of ConstantData (#134573)
These should not really have uselists, and it's not worth the compile time of looking at all uses of trivial constants. The main observable change of this is it no longer adds align attributes on constant null uses, but those are not useful. Some of these cases should potentially be more aggressive and not look at any Constant users.
1 parent 4701afa commit 783201b

13 files changed

+60
-50
lines changed

llvm/lib/Transforms/IPO/Attributor.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,9 @@ bool Attributor::checkForAllUses(
17691769
if (!CB(*this, &QueryingAA))
17701770
return false;
17711771

1772+
if (isa<ConstantData>(V))
1773+
return false;
1774+
17721775
// Check the trivial case first as it catches void values.
17731776
if (V.use_empty())
17741777
return true;

llvm/lib/Transforms/IPO/AttributorAttributes.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -643,14 +643,18 @@ static void followUsesInContext(AAType &AA, Attributor &A,
643643
template <class AAType, typename StateType = typename AAType::StateType>
644644
static void followUsesInMBEC(AAType &AA, Attributor &A, StateType &S,
645645
Instruction &CtxI) {
646+
const Value &Val = AA.getIRPosition().getAssociatedValue();
647+
if (isa<ConstantData>(Val))
648+
return;
649+
646650
MustBeExecutedContextExplorer *Explorer =
647651
A.getInfoCache().getMustBeExecutedContextExplorer();
648652
if (!Explorer)
649653
return;
650654

651655
// Container for (transitive) uses of the associated value.
652656
SetVector<const Use *> Uses;
653-
for (const Use &U : AA.getIRPosition().getAssociatedValue().uses())
657+
for (const Use &U : Val.uses())
654658
Uses.insert(&U);
655659

656660
followUsesInContext<AAType>(AA, A, *Explorer, &CtxI, Uses, S);
@@ -5283,6 +5287,9 @@ struct AAAlignImpl : AAAlign {
52835287

52845288
// Check for users that allow alignment annotations.
52855289
Value &AssociatedValue = getAssociatedValue();
5290+
if (isa<ConstantData>(AssociatedValue))
5291+
return ChangeStatus::UNCHANGED;
5292+
52865293
for (const Use &U : AssociatedValue.uses()) {
52875294
if (auto *SI = dyn_cast<StoreInst>(U.getUser())) {
52885295
if (SI->getPointerOperand() == &AssociatedValue)

llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll

+8-8
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,21 @@ define dso_local i32 @main() {
3737
; TUNIT-NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
3838
; TUNIT-NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
3939
; TUNIT-NEXT: [[THREAD:%.*]] = alloca i64, align 8
40-
; TUNIT-NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @foo, ptr nofree readnone align 4294967296 undef)
41-
; TUNIT-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nofree nonnull readnone align 8 captures(none) dereferenceable(8) undef)
42-
; TUNIT-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(1) [[ALLOC1]])
43-
; TUNIT-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
40+
; TUNIT-NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @foo, ptr nofree readnone undef)
41+
; TUNIT-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @bar, ptr noalias nofree nonnull readnone align 8 captures(none) dereferenceable(8) undef)
42+
; TUNIT-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @baz, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(1) [[ALLOC1]])
43+
; TUNIT-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC2]])
4444
; TUNIT-NEXT: ret i32 0
4545
;
4646
; CGSCC-LABEL: define {{[^@]+}}@main() {
4747
; CGSCC-NEXT: entry:
4848
; CGSCC-NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
4949
; CGSCC-NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
5050
; CGSCC-NEXT: [[THREAD:%.*]] = alloca i64, align 8
51-
; CGSCC-NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @foo, ptr nofree noundef readnone align 4294967296 null)
52-
; CGSCC-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(8) @GlobalVPtr)
53-
; CGSCC-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(1) [[ALLOC1]])
54-
; CGSCC-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC2]])
51+
; CGSCC-NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @foo, ptr nofree noundef readnone null)
52+
; CGSCC-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @bar, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(8) @GlobalVPtr)
53+
; CGSCC-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @baz, ptr noalias nofree noundef nonnull readnone align 8 captures(none) dereferenceable(1) [[ALLOC1]])
54+
; CGSCC-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC2]])
5555
; CGSCC-NEXT: ret i32 0
5656
;
5757
entry:

llvm/test/Transforms/Attributor/allocator.ll

+6-6
Original file line numberDiff line numberDiff line change
@@ -425,21 +425,21 @@ define dso_local void @pthread_test(){
425425
; TUNIT-LABEL: define dso_local void @pthread_test() {
426426
; TUNIT-NEXT: [[ARG1:%.*]] = alloca i8, align 8
427427
; TUNIT-NEXT: [[THREAD:%.*]] = alloca i64, align 8
428-
; TUNIT-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_allocation_should_remain_same, ptr noundef nonnull align 8 dereferenceable(1) [[ARG1]])
428+
; TUNIT-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_allocation_should_remain_same, ptr noundef nonnull align 8 dereferenceable(1) [[ARG1]])
429429
; TUNIT-NEXT: [[F1:%.*]] = alloca i8, i32 4, align 4
430-
; TUNIT-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_allocation_should_be_reduced, ptr noalias nofree nonnull readnone align 4 captures(none) dereferenceable(12) undef)
430+
; TUNIT-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_allocation_should_be_reduced, ptr noalias nofree nonnull readnone align 4 captures(none) dereferenceable(12) undef)
431431
; TUNIT-NEXT: [[F2:%.*]] = alloca [[STRUCT_FOO:%.*]], align 4
432-
; TUNIT-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_check_captured_pointer, ptr noundef nonnull align 4 dereferenceable(12) [[F2]])
432+
; TUNIT-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_check_captured_pointer, ptr noundef nonnull align 4 dereferenceable(12) [[F2]])
433433
; TUNIT-NEXT: ret void
434434
;
435435
; CGSCC-LABEL: define dso_local void @pthread_test() {
436436
; CGSCC-NEXT: [[ARG1:%.*]] = alloca i8, align 8
437437
; CGSCC-NEXT: [[THREAD:%.*]] = alloca i64, align 8
438-
; CGSCC-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_allocation_should_remain_same, ptr noundef nonnull align 8 dereferenceable(1) [[ARG1]])
438+
; CGSCC-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_allocation_should_remain_same, ptr noundef nonnull align 8 dereferenceable(1) [[ARG1]])
439439
; CGSCC-NEXT: [[F:%.*]] = alloca [[STRUCT_FOO:%.*]], align 4
440-
; CGSCC-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_allocation_should_be_reduced, ptr noalias nofree noundef nonnull readonly align 4 captures(none) dereferenceable(12) [[F]])
440+
; CGSCC-NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_allocation_should_be_reduced, ptr noalias nofree noundef nonnull readonly align 4 captures(none) dereferenceable(12) [[F]])
441441
; CGSCC-NEXT: [[F2:%.*]] = alloca [[STRUCT_FOO]], align 4
442-
; CGSCC-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @pthread_check_captured_pointer, ptr noundef nonnull align 4 dereferenceable(12) [[F2]])
442+
; CGSCC-NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef null, ptr noundef nonnull @pthread_check_captured_pointer, ptr noundef nonnull align 4 dereferenceable(12) [[F2]])
443443
; CGSCC-NEXT: ret void
444444
;
445445
%arg1 = alloca i8, align 8

llvm/test/Transforms/Attributor/callbacks.ll

+10-10
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ define void @t0_caller(ptr %a) {
2222
; TUNIT-NEXT: [[PTR:%.*]] = alloca i32, align 128
2323
; TUNIT-NEXT: store i32 42, ptr [[B]], align 32
2424
; TUNIT-NEXT: store ptr [[B]], ptr [[C]], align 64
25-
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noundef align 4294967296 null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef nonnull @t0_callback_callee, ptr align 256 [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
25+
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noundef null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef nonnull @t0_callback_callee, ptr align 256 [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
2626
; TUNIT-NEXT: ret void
2727
;
2828
; CGSCC-LABEL: define {{[^@]+}}@t0_caller
@@ -33,7 +33,7 @@ define void @t0_caller(ptr %a) {
3333
; CGSCC-NEXT: [[PTR:%.*]] = alloca i32, align 128
3434
; CGSCC-NEXT: store i32 42, ptr [[B]], align 32
3535
; CGSCC-NEXT: store ptr [[B]], ptr [[C]], align 64
36-
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noundef align 4294967296 null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef nonnull @t0_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
36+
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t0_callback_broker(ptr noundef null, ptr noundef nonnull align 128 dereferenceable(4) [[PTR]], ptr noundef nonnull @t0_callback_callee, ptr align 256 [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
3737
; CGSCC-NEXT: ret void
3838
;
3939
entry:
@@ -95,7 +95,7 @@ define void @t1_caller(ptr noalias %a) {
9595
; TUNIT-NEXT: [[PTR:%.*]] = alloca i32, align 128
9696
; TUNIT-NEXT: store i32 42, ptr [[B]], align 32
9797
; TUNIT-NEXT: store ptr [[B]], ptr [[C]], align 64
98-
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t1_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
98+
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t1_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
9999
; TUNIT-NEXT: ret void
100100
;
101101
; CGSCC-LABEL: define {{[^@]+}}@t1_caller
@@ -106,7 +106,7 @@ define void @t1_caller(ptr noalias %a) {
106106
; CGSCC-NEXT: [[PTR:%.*]] = alloca i32, align 128
107107
; CGSCC-NEXT: store i32 42, ptr [[B]], align 32
108108
; CGSCC-NEXT: store ptr [[B]], ptr [[C]], align 64
109-
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t1_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
109+
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t1_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t1_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
110110
; CGSCC-NEXT: ret void
111111
;
112112
entry:
@@ -168,7 +168,7 @@ define void @t2_caller(ptr noalias %a) {
168168
; TUNIT-NEXT: [[PTR:%.*]] = alloca i32, align 128
169169
; TUNIT-NEXT: store i32 42, ptr [[B]], align 32
170170
; TUNIT-NEXT: store ptr [[B]], ptr [[C]], align 64
171-
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t2_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
171+
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t2_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
172172
; TUNIT-NEXT: ret void
173173
;
174174
; CGSCC-LABEL: define {{[^@]+}}@t2_caller
@@ -179,7 +179,7 @@ define void @t2_caller(ptr noalias %a) {
179179
; CGSCC-NEXT: [[PTR:%.*]] = alloca i32, align 128
180180
; CGSCC-NEXT: store i32 42, ptr [[B]], align 32
181181
; CGSCC-NEXT: store ptr [[B]], ptr [[C]], align 64
182-
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t2_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
182+
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t2_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t2_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
183183
; CGSCC-NEXT: ret void
184184
;
185185
entry:
@@ -241,8 +241,8 @@ define void @t3_caller(ptr noalias %a) {
241241
; TUNIT-NEXT: [[PTR:%.*]] = alloca i32, align 128
242242
; TUNIT-NEXT: store i32 42, ptr [[B]], align 32
243243
; TUNIT-NEXT: store ptr [[B]], ptr [[C]], align 64
244-
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
245-
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
244+
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
245+
; TUNIT-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 undef, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
246246
; TUNIT-NEXT: ret void
247247
;
248248
; CGSCC-LABEL: define {{[^@]+}}@t3_caller
@@ -253,8 +253,8 @@ define void @t3_caller(ptr noalias %a) {
253253
; CGSCC-NEXT: [[PTR:%.*]] = alloca i32, align 128
254254
; CGSCC-NEXT: store i32 42, ptr [[B]], align 32
255255
; CGSCC-NEXT: store ptr [[B]], ptr [[C]], align 64
256-
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
257-
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef align 4294967296 null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
256+
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
257+
; CGSCC-NEXT: call void (ptr, ptr, ptr, ...) @t3_callback_broker(ptr noundef null, ptr noalias noundef nonnull align 128 captures(none) dereferenceable(4) [[PTR]], ptr noundef nonnull captures(none) @t3_callback_callee, ptr align 256 captures(none) [[A]], i64 noundef 99, ptr noalias nofree noundef nonnull readonly align 64 captures(none) dereferenceable(8) [[C]])
258258
; CGSCC-NEXT: ret void
259259
;
260260
entry:

llvm/test/Transforms/Attributor/issue87856.ll

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
define void @null_ptr_is_valid_call_with_null() #0 {
55
; CHECK-LABEL: define void @null_ptr_is_valid_call_with_null(
66
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
7-
; CHECK-NEXT: call void @store_as0(ptr nofree noundef writeonly align 4294967296 null) #[[ATTR4:[0-9]+]]
7+
; CHECK-NEXT: call void @store_as0(ptr nofree noundef writeonly null) #[[ATTR4:[0-9]+]]
88
; CHECK-NEXT: ret void
99
;
1010
call void @store_as0(ptr null)
@@ -34,7 +34,7 @@ define void @store_as0(ptr %0) {
3434
define void @call_store_as1() {
3535
; CHECK-LABEL: define void @call_store_as1(
3636
; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
37-
; CHECK-NEXT: call void @store_as1(ptr addrspace(1) nofree noundef writeonly align 4294967296 captures(none) null) #[[ATTR4]]
37+
; CHECK-NEXT: call void @store_as1(ptr addrspace(1) nofree noundef writeonly captures(none) null) #[[ATTR4]]
3838
; CHECK-NEXT: ret void
3939
;
4040
call void @store_as1(ptr addrspace(1) null)

0 commit comments

Comments
 (0)