Skip to content

Commit 872a7e9

Browse files
!fixup address reviews
1 parent d563a48 commit 872a7e9

File tree

6 files changed

+23
-77
lines changed

6 files changed

+23
-77
lines changed

llvm/lib/Transforms/IPO/FunctionAttrs.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,12 @@ static void addLocAccess(MemoryEffects &ME, const MemoryLocation &Loc,
118118
ModRefInfo MR, AAResults &AAR) {
119119
// Ignore accesses to known-invariant or local memory.
120120
MR &= AAR.getModRefInfoMask(Loc, /*IgnoreLocal=*/true);
121-
if (isNoModRef(MR)) {
122-
// Mask out errno, can never alias this known-invariant memory location.
123-
ME -= ME.errnoMemOnly();
121+
if (isNoModRef(MR))
124122
return;
125-
}
126123

127124
const Value *UO = getUnderlyingObjectAggressive(Loc.Ptr);
128-
if (isa<AllocaInst>(UO)) {
129-
ME -= ME.errnoMemOnly();
125+
if (isa<AllocaInst>(UO))
130126
return;
131-
}
132127
if (isa<Argument>(UO)) {
133128
ME |= MemoryEffects::argMemOnly(MR);
134129
return;
@@ -267,20 +262,6 @@ checkFunctionMemoryAccess(Function &F, bool ThisBody, AAResults &AAR,
267262

268263
// Refine memory effects for the given location.
269264
addLocAccess(ME, *Loc, MR, AAR);
270-
271-
// Last attempt if errnomem has not been inferred yet: accesses larger than
272-
// integers cannot alias errno.
273-
if (ME.getModRef(IRMemLocation::ErrnoMem) != ModRefInfo::NoModRef) {
274-
if (isa<LoadInst>(I) || isa<StoreInst>(I)) {
275-
auto *Ty = isa<LoadInst>(I)
276-
? I.getType()
277-
: cast<StoreInst>(I).getValueOperand()->getType();
278-
if (!Ty->isPtrOrPtrVectorTy() &&
279-
Loc->Size != MemoryLocation::UnknownSize &&
280-
Loc->Size.getValue() > sizeof(int))
281-
ME = ME.getWithoutLoc(IRMemLocation::ErrnoMem);
282-
}
283-
}
284265
}
285266

286267
return {OrigME & ME, RecursiveArgME};

llvm/test/Transforms/FunctionAttrs/argmemonly.ll

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ define void @test_inaccessiblememonly_readonly() {
334334
; FNATTRS: Function Attrs: nofree memory(inaccessiblemem: read)
335335
; FNATTRS-LABEL: define void @test_inaccessiblememonly_readonly
336336
; FNATTRS-SAME: () #[[ATTR13:[0-9]+]] {
337-
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR20:[0-9]+]]
337+
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR19:[0-9]+]]
338338
; FNATTRS-NEXT: ret void
339339
;
340340
; ATTRIBUTOR: Function Attrs: nosync memory(inaccessiblemem: read)
@@ -352,7 +352,7 @@ define void @test_inaccessibleorargmemonly_readonly(ptr %arg) {
352352
; FNATTRS-LABEL: define void @test_inaccessibleorargmemonly_readonly
353353
; FNATTRS-SAME: (ptr readonly captures(none) [[ARG:%.*]]) #[[ATTR14:[0-9]+]] {
354354
; FNATTRS-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARG]], align 4
355-
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR20]]
355+
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR19]]
356356
; FNATTRS-NEXT: ret void
357357
;
358358
; ATTRIBUTOR: Function Attrs: nosync memory(argmem: read, inaccessiblemem: read)
@@ -372,7 +372,7 @@ define void @test_inaccessibleorargmemonly_readwrite(ptr %arg) {
372372
; FNATTRS-LABEL: define void @test_inaccessibleorargmemonly_readwrite
373373
; FNATTRS-SAME: (ptr writeonly captures(none) initializes((0, 4)) [[ARG:%.*]]) #[[ATTR15:[0-9]+]] {
374374
; FNATTRS-NEXT: store i32 0, ptr [[ARG]], align 4
375-
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR20]]
375+
; FNATTRS-NEXT: call void @fn_inaccessiblememonly() #[[ATTR19]]
376376
; FNATTRS-NEXT: ret void
377377
;
378378
; ATTRIBUTOR: Function Attrs: nosync memory(argmem: readwrite, inaccessiblemem: readwrite)
@@ -518,9 +518,9 @@ entry:
518518

519519
; FIXME: This could be `memory(argmem: read)`.
520520
define i64 @select_different_obj(i1 %c, ptr %p, ptr %p2) {
521-
; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none, errnomem: none)
521+
; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none)
522522
; FNATTRS-LABEL: define i64 @select_different_obj
523-
; FNATTRS-SAME: (i1 [[C:%.*]], ptr readonly captures(none) [[P:%.*]], ptr readonly captures(none) [[P2:%.*]]) #[[ATTR19:[0-9]+]] {
523+
; FNATTRS-SAME: (i1 [[C:%.*]], ptr readonly captures(none) [[P:%.*]], ptr readonly captures(none) [[P2:%.*]]) #[[ATTR3]] {
524524
; FNATTRS-NEXT: entry:
525525
; FNATTRS-NEXT: [[P3:%.*]] = select i1 [[C]], ptr [[P]], ptr [[P2]]
526526
; FNATTRS-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
@@ -580,9 +580,9 @@ join:
580580

581581
; FIXME: This could be `memory(argmem: read)`.
582582
define i64 @phi_different_obj(i1 %c, ptr %p, ptr %p2) {
583-
; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none, errnomem: none)
583+
; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none)
584584
; FNATTRS-LABEL: define i64 @phi_different_obj
585-
; FNATTRS-SAME: (i1 [[C:%.*]], ptr readonly captures(none) [[P:%.*]], ptr readonly captures(none) [[P2:%.*]]) #[[ATTR19]] {
585+
; FNATTRS-SAME: (i1 [[C:%.*]], ptr readonly captures(none) [[P:%.*]], ptr readonly captures(none) [[P2:%.*]]) #[[ATTR3]] {
586586
; FNATTRS-NEXT: entry:
587587
; FNATTRS-NEXT: br i1 [[C]], label [[IF:%.*]], label [[JOIN:%.*]]
588588
; FNATTRS: if:

llvm/test/Transforms/FunctionAttrs/errnomemnone.ll

Lines changed: 0 additions & 30 deletions
This file was deleted.

llvm/test/Transforms/FunctionAttrs/initializes.ll

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,8 @@ define void @partial_load_before_store(ptr %p) {
9191
declare void @use(ptr)
9292

9393
define void @call_clobber(ptr %p) {
94-
; CHECK: Function Attrs: memory(readwrite, errnomem: none)
9594
; CHECK-LABEL: define void @call_clobber(
96-
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR2:[0-9]+]] {
95+
; CHECK-SAME: ptr [[P:%.*]]) {
9796
; CHECK-NEXT: call void @use(ptr [[P]])
9897
; CHECK-NEXT: store i64 123, ptr [[P]], align 4
9998
; CHECK-NEXT: ret void
@@ -131,7 +130,7 @@ define void @store_offset(ptr %p) {
131130
define void @store_volatile(ptr %p) {
132131
; CHECK: Function Attrs: nofree norecurse nounwind memory(argmem: readwrite, inaccessiblemem: readwrite)
133132
; CHECK-LABEL: define void @store_volatile(
134-
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR3:[0-9]+]] {
133+
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR2:[0-9]+]] {
135134
; CHECK-NEXT: [[G:%.*]] = getelementptr i8, ptr [[P]], i64 8
136135
; CHECK-NEXT: store volatile i32 123, ptr [[G]], align 4
137136
; CHECK-NEXT: ret void
@@ -242,9 +241,8 @@ end:
242241
}
243242

244243
define void @call_clobber_on_one_branch(ptr %p, i1 %i) {
245-
; CHECK: Function Attrs: memory(readwrite, errnomem: none)
246244
; CHECK-LABEL: define void @call_clobber_on_one_branch(
247-
; CHECK-SAME: ptr [[P:%.*]], i1 [[I:%.*]]) #[[ATTR2]] {
245+
; CHECK-SAME: ptr [[P:%.*]], i1 [[I:%.*]]) {
248246
; CHECK-NEXT: entry:
249247
; CHECK-NEXT: br i1 [[I]], label [[BB1:%.*]], label [[BB2:%.*]]
250248
; CHECK: bb1:
@@ -308,9 +306,8 @@ define void @non_const_gep(ptr %p, i64 %i) {
308306
}
309307

310308
define void @call_clobber_in_entry_block(ptr %p, i1 %i) {
311-
; CHECK: Function Attrs: memory(readwrite, errnomem: none)
312309
; CHECK-LABEL: define void @call_clobber_in_entry_block(
313-
; CHECK-SAME: ptr [[P:%.*]], i1 [[I:%.*]]) #[[ATTR2]] {
310+
; CHECK-SAME: ptr [[P:%.*]], i1 [[I:%.*]]) {
314311
; CHECK-NEXT: entry:
315312
; CHECK-NEXT: call void @use(ptr [[P]])
316313
; CHECK-NEXT: br i1 [[I]], label [[BB1:%.*]], label [[BB2:%.*]]
@@ -387,7 +384,7 @@ define void @call_initializes_escape_bundle(ptr %p) {
387384
define void @access_bundle() {
388385
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
389386
; CHECK-LABEL: define void @access_bundle(
390-
; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {
387+
; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
391388
; CHECK-NEXT: [[SINK:%.*]] = alloca i64, align 8
392389
; CHECK-NEXT: store i64 123, ptr [[SINK]], align 4
393390
; CHECK-NEXT: ret void
@@ -400,7 +397,7 @@ define void @access_bundle() {
400397
define void @call_operand_bundle(ptr %p) {
401398
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
402399
; CHECK-LABEL: define void @call_operand_bundle(
403-
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR5:[0-9]+]] {
400+
; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR4:[0-9]+]] {
404401
; CHECK-NEXT: call void @access_bundle() [ "unknown"(ptr [[P]]) ]
405402
; CHECK-NEXT: ret void
406403
;
@@ -448,7 +445,7 @@ define void @memset_neg(ptr %p) {
448445
define void @memset_volatile(ptr %p) {
449446
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: write)
450447
; CHECK-LABEL: define void @memset_volatile(
451-
; CHECK-SAME: ptr writeonly [[P:%.*]]) #[[ATTR6:[0-9]+]] {
448+
; CHECK-SAME: ptr writeonly [[P:%.*]]) #[[ATTR5:[0-9]+]] {
452449
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr [[P]], i8 2, i64 9, i1 true)
453450
; CHECK-NEXT: ret void
454451
;
@@ -483,7 +480,7 @@ define void @memcpy(ptr %p, ptr %p2) {
483480
define void @memcpy_volatile(ptr %p, ptr %p2) {
484481
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)
485482
; CHECK-LABEL: define void @memcpy_volatile(
486-
; CHECK-SAME: ptr writeonly [[P:%.*]], ptr readonly [[P2:%.*]]) #[[ATTR7:[0-9]+]] {
483+
; CHECK-SAME: ptr writeonly [[P:%.*]], ptr readonly [[P2:%.*]]) #[[ATTR6:[0-9]+]] {
487484
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[P]], ptr [[P2]], i64 9, i1 true)
488485
; CHECK-NEXT: ret void
489486
;
@@ -546,7 +543,7 @@ define void @memmove(ptr %p, ptr %p2) {
546543
define void @memmove_volatile(ptr %p, ptr %p2) {
547544
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)
548545
; CHECK-LABEL: define void @memmove_volatile(
549-
; CHECK-SAME: ptr writeonly [[P:%.*]], ptr readonly [[P2:%.*]]) #[[ATTR7]] {
546+
; CHECK-SAME: ptr writeonly [[P:%.*]], ptr readonly [[P2:%.*]]) #[[ATTR6]] {
550547
; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr [[P]], ptr [[P2]], i64 9, i1 true)
551548
; CHECK-NEXT: ret void
552549
;

llvm/test/Transforms/FunctionAttrs/readattrs.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,8 @@ declare void @escape_readonly_ptr(ptr %addr, ptr readonly %ptr)
376376
; is marked as readnone/only. However, the functions can write the pointer into
377377
; %addr, causing the store to write to %escaped_then_written.
378378
define void @unsound_readnone(ptr %ignored, ptr %escaped_then_written) {
379-
; FNATTRS: Function Attrs: memory(readwrite, errnomem: write)
380379
; FNATTRS-LABEL: define {{[^@]+}}@unsound_readnone
381-
; FNATTRS-SAME: (ptr readnone captures(none) [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) #[[ATTR14:[0-9]+]] {
380+
; FNATTRS-SAME: (ptr readnone captures(none) [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) {
382381
; FNATTRS-NEXT: [[ADDR:%.*]] = alloca ptr, align 8
383382
; FNATTRS-NEXT: call void @escape_readnone_ptr(ptr [[ADDR]], ptr [[ESCAPED_THEN_WRITTEN]])
384383
; FNATTRS-NEXT: [[ADDR_LD:%.*]] = load ptr, ptr [[ADDR]], align 8
@@ -409,9 +408,8 @@ define void @unsound_readnone(ptr %ignored, ptr %escaped_then_written) {
409408
}
410409

411410
define void @unsound_readonly(ptr %ignored, ptr %escaped_then_written) {
412-
; FNATTRS: Function Attrs: memory(readwrite, errnomem: write)
413411
; FNATTRS-LABEL: define {{[^@]+}}@unsound_readonly
414-
; FNATTRS-SAME: (ptr readnone captures(none) [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) #[[ATTR14]] {
412+
; FNATTRS-SAME: (ptr readnone captures(none) [[IGNORED:%.*]], ptr [[ESCAPED_THEN_WRITTEN:%.*]]) {
415413
; FNATTRS-NEXT: [[ADDR:%.*]] = alloca ptr, align 8
416414
; FNATTRS-NEXT: call void @escape_readonly_ptr(ptr [[ADDR]], ptr [[ESCAPED_THEN_WRITTEN]])
417415
; FNATTRS-NEXT: [[ADDR_LD:%.*]] = load ptr, ptr [[ADDR]], align 8
@@ -572,7 +570,7 @@ define void @fptr_test2c(ptr %p, ptr %f) {
572570
define void @alloca_recphi() {
573571
; FNATTRS: Function Attrs: nofree norecurse nosync nounwind memory(none)
574572
; FNATTRS-LABEL: define {{[^@]+}}@alloca_recphi
575-
; FNATTRS-SAME: () #[[ATTR15:[0-9]+]] {
573+
; FNATTRS-SAME: () #[[ATTR14:[0-9]+]] {
576574
; FNATTRS-NEXT: entry:
577575
; FNATTRS-NEXT: [[A:%.*]] = alloca [8 x i32], align 4
578576
; FNATTRS-NEXT: [[A_END:%.*]] = getelementptr i32, ptr [[A]], i64 8
@@ -725,7 +723,7 @@ define void @op_bundle_readonly_unknown(ptr %p) {
725723
define i32 @writable_readonly(ptr writable dereferenceable(4) %p) {
726724
; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
727725
; FNATTRS-LABEL: define {{[^@]+}}@writable_readonly
728-
; FNATTRS-SAME: (ptr readonly captures(none) dereferenceable(4) [[P:%.*]]) #[[ATTR16:[0-9]+]] {
726+
; FNATTRS-SAME: (ptr readonly captures(none) dereferenceable(4) [[P:%.*]]) #[[ATTR15:[0-9]+]] {
729727
; FNATTRS-NEXT: [[V:%.*]] = load i32, ptr [[P]], align 4
730728
; FNATTRS-NEXT: ret i32 [[V]]
731729
;

llvm/test/Transforms/PhaseOrdering/pr95152.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ define void @g(ptr dead_on_unwind noalias writable dereferenceable(8) align 8 %p
4545

4646
define void @f(ptr dead_on_unwind noalias %p) {
4747
; CHECK-LABEL: define void @f(
48-
; CHECK-SAME: ptr dead_on_unwind noalias initializes((0, 8)) [[P:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
48+
; CHECK-SAME: ptr dead_on_unwind noalias initializes((0, 8)) [[P:%.*]]) local_unnamed_addr {
4949
; CHECK-NEXT: store i64 3, ptr [[P]], align 4
5050
; CHECK-NEXT: tail call void @j(ptr nonnull align 8 dereferenceable(8) [[P]])
5151
; CHECK-NEXT: store i64 43, ptr [[P]], align 4

0 commit comments

Comments
 (0)