<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Weird. <br>
</p>
<p>I think I figured out what's going on. I'm guessing both of you
have old build directories from before the enable new pass manager
flag got thrown a couple of a weeks ago.</p>
<p>What leads me to this conclusion is that the inference for
nofree_function differs in David's output from what's checked in
(and what I can reproduce locally). Playing around with options
made me realize that David's output matches the old PM, whereas
the checked in output matches the new PM.</p>
<p>8c95f995 explicitly specifies this test should use new PM. I'm
curious if that resolves your issue?<br>
</p>
<p>Philip</p>
<br>
<div class="moz-cite-prefix">On 4/3/21 1:26 AM, Nikita Popov wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAF+90c9GFiJDeuepH10M4eTDF4UA9DUv202n1JT-AhGs_BLyYA@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div>I also had this failure, and it went away after deleting my
build directory and doing a full rebuild. No idea what caused
it.<br>
</div>
<div><br>
</div>
<div>Nikita<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Apr 3, 2021 at 6:39
AM David Blaikie via llvm-commits <<a
href="mailto:llvm-commits@lists.llvm.org"
moz-do-not-send="true">llvm-commits@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">I still seem to have a local failure even
after that patch - maybe there's something weird going on
on my system, but it's pretty average linux x86 kind of
situation:<br>
<br>
<font face="monospace">/home/blaikie/dev/llvm/src/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll:131:11:
error: FNATTR: expected st<br>
ring not found in input<br>
; FNATTR: Function Attrs: nofree noinline nounwind
readnone uwtable<br>
^<br>
<stdin>:74:78: note: scanning from here<br>
define noalias i8* @call_realloc(i8* nocapture %0, i64
%1) local_unnamed_addr #1 {<br>
^<br>
<stdin>:82:3: note: possible intended match here<br>
; Function Attrs: noinline nosync nounwind readnone
uwtable<br>
^<br>
<br>
Input file: <stdin><br>
Check file:
/usr/local/google/home/blaikie/dev/llvm/src/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll<br>
<br>
-dump-input=help explains the following input dump.<br>
<br>
Input was:<br>
<<<<<<<br>
.<br>
.<br>
.<br>
69: 4: ; preds = %3, %1 <br>
70: ret void <br>
71: } <br>
72: <br>
73: ; Function Attrs: noinline nounwind
uwtable <br>
74: define noalias i8* @call_realloc(i8*
nocapture %0, i64 %1) local_unnamed_addr #1 { <br>
check:131'0
X~~~~~ error: no
match found<br>
75: %ret = tail call i8* @realloc(i8* %0,
i64 %1) #2 <br>
check:131'0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
76: ret i8* %ret <br>
check:131'0 ~~~~~~~~~~~~~~<br>
77: } <br>
check:131'0 ~~<br>
78: <br>
check:131'0 ~<br>
79: ; Function Attrs: nofree noinline nosync
nounwind readnone uwtable <br>
check:131'0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
80: declare void @nofree_function() #5 <br>
check:131'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
81: <br>
check:131'0 ~<br>
82: ; Function Attrs: noinline nosync
nounwind readnone uwtable <br>
check:131'0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
check:131'1 ?
possible intended match<br>
83: define void @call_nofree_function() #4 {
<br>
check:131'0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
84: tail call void @nofree_function() <br>
check:131'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
85: ret void <br>
check:131'0 ~~~~~~~~~~<br>
86: } <br>
check:131'0 ~~<br>
87: <br>
check:131'0 ~<br>
.<br>
.<br>
.<br>
>>>>>></font><br>
</div>
<br>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Apr 1, 2021 at
12:17 PM Philip Reames via llvm-commits <<a
href="mailto:llvm-commits@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-commits@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">Fixed in a8ac881.<br>
<br>
On 4/1/21 12:01 PM, Philip Reames via llvm-commits
wrote:<br>
> This appears to have broken a bunch of bots. I
missed updating some <br>
> target specific tests.<br>
><br>
> I'll have that fixed shortly.<br>
><br>
> Philip<br>
><br>
> On 4/1/21 11:37 AM, Philip Reames via llvm-commits
wrote:<br>
>> Author: Philip Reames<br>
>> Date: 2021-04-01T11:37:34-07:00<br>
>> New Revision:
6ef4505298be08b8cb4243c7d28751e0e315370a<br>
>><br>
>> URL: <br>
>> <a
href="https://github.com/llvm/llvm-project/commit/6ef4505298be08b8cb4243c7d28751e0e315370a"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://github.com/llvm/llvm-project/commit/6ef4505298be08b8cb4243c7d28751e0e315370a</a><br>
>> DIFF: <br>
>> <a
href="https://github.com/llvm/llvm-project/commit/6ef4505298be08b8cb4243c7d28751e0e315370a.diff"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://github.com/llvm/llvm-project/commit/6ef4505298be08b8cb4243c7d28751e0e315370a.diff</a><br>
>><br>
>> LOG: [funcattrs] Infer nosync from readnone and
non-convergent<br>
>><br>
>> This implements the most basic possible nosync
inference. The choice <br>
>> of inference rule is taken from the comments in
attributor and the <br>
>> discussion on the review of the change which
introduced the nosync <br>
>> attribute (0626367202c).<br>
>><br>
>> This is deliberately minimal. As noted in code
comments, I do plan to <br>
>> add a more robust inference which actually
scans the function IR <br>
>> directly, but a) I need to do some refactoring
of the attributor code <br>
>> to use common interfaces, and b) I wanted to
get something in. I also <br>
>> wanted to minimize the "interesting" analysis
discussion since that's <br>
>> time intensive.<br>
>><br>
>> Context: This combines with existing nofree
attribute inference to <br>
>> help prove dereferenceability in the ongoing
deref-at-point semantics <br>
>> work.<br>
>><br>
>> Differential Revision: <a
href="https://reviews.llvm.org/D99749"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://reviews.llvm.org/D99749</a><br>
>><br>
>> Added:<br>
>><br>
>> Modified:<br>
>> llvm/lib/Transforms/IPO/FunctionAttrs.cpp<br>
>>
llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll<br>
>> llvm/test/Other/cgscc-devirt-iteration.ll<br>
>>
llvm/test/Other/cgscc-iterate-function-mutation.ll<br>
>> llvm/test/Other/cgscc-observe-devirt.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/atomic.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/incompatible_fn_attrs.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/norecurse.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/nosync.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/nounwind.ll<br>
>>
llvm/test/Transforms/FunctionAttrs/optnone.ll<br>
>>
llvm/test/Transforms/Inline/cgscc-update.ll<br>
>><br>
>> Removed:<br>
>><br>
>><br>
>>
################################################################################
<br>
>><br>
>> diff --git
a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp <br>
>> b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp<br>
>> index 6730824e860ac..87eaf2dd2fdf4 100644<br>
>> --- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp<br>
>> +++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp<br>
>> @@ -79,6 +79,7 @@ STATISTIC(NumNoRecurse,
"Number of functions marked <br>
>> as norecurse");<br>
>> STATISTIC(NumNoUnwind, "Number of functions
marked as nounwind");<br>
>> STATISTIC(NumNoFree, "Number of functions
marked as nofree");<br>
>> STATISTIC(NumWillReturn, "Number of functions
marked as willreturn");<br>
>> +STATISTIC(NumNoSync, "Number of functions
marked as nosync");<br>
>> static cl::opt<bool>
EnableNonnullArgPropagation(<br>
>> "enable-nonnull-arg-prop",
cl::init(true), cl::Hidden,<br>
>> @@ -1472,6 +1473,28 @@ static bool
addWillReturn(const SCCNodeSet <br>
>> &SCCNodes) {<br>
>> return Changed;<br>
>> }<br>
>> +// Infer the nosync attribute. For the
moment, the inference is <br>
>> trivial<br>
>> +// and relies on the readnone attribute
already being infered. This <br>
>> will<br>
>> +// be replaced with a more robust
implementation in the near future.<br>
>> +static bool addNoSyncAttr(const SCCNodeSet
&SCCNodes) {<br>
>> + bool Changed = false;<br>
>> +<br>
>> + for (Function *F : SCCNodes) {<br>
>> + if (!F || F->hasNoSync())<br>
>> + continue;<br>
>> +<br>
>> + // readnone + not convergent implies
nosync<br>
>> + if (!F->doesNotAccessMemory() ||
F->isConvergent())<br>
>> + continue;<br>
>> +<br>
>> + F->setNoSync();<br>
>> + NumNoSync++;<br>
>> + Changed = true;<br>
>> + }<br>
>> +<br>
>> + return Changed;<br>
>> +}<br>
>> +<br>
>> static SCCNodesResult
createSCCNodeSet(ArrayRef<Function *> <br>
>> Functions) {<br>
>> SCCNodesResult Res;<br>
>> Res.HasUnknownCall = false;<br>
>> @@ -1527,6 +1550,8 @@ static bool <br>
>> deriveAttrsInPostOrder(ArrayRef<Function
*> Functions,<br>
>> Changed |=
addNoRecurseAttrs(Nodes.SCCNodes);<br>
>> }<br>
>> + Changed |= addNoSyncAttr(Nodes.SCCNodes);<br>
>> +<br>
>> return Changed;<br>
>> }<br>
>><br>
>> diff --git <br>
>>
a/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll
<br>
>>
b/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll<br>
>> index 5bbc86bb69ed2..d0f142b1cef52 100644<br>
>> ---
a/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll<br>
>> +++
b/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll<br>
>> @@ -72,11 +72,11 @@ define i32 @test3_no(i8*
%p) nounwind {<br>
>> declare void @callee(i32* %p) nounwind<br>
>> declare void @llvm.memcpy.p0i8.p0i8.i64(i8*,
i8*, i64, i1) nounwind<br>
>> -; CHECK: attributes #0 = { norecurse
nounwind readnone willreturn }<br>
>> +; CHECK: attributes #0 = { norecurse nosync
nounwind readnone <br>
>> willreturn }<br>
>> ; CHECK: attributes #1 = { nofree norecurse
nounwind willreturn <br>
>> writeonly }<br>
>> ; CHECK: attributes #2 = { nounwind readonly
}<br>
>> ; CHECK: attributes #3 = { nounwind }<br>
>> -; CHECK: attributes #4 = { nounwind readnone
willreturn }<br>
>> +; CHECK: attributes #4 = { nosync nounwind
readnone willreturn }<br>
>> ; CHECK: attributes #5 = { nofree nounwind
willreturn }<br>
>> ; CHECK: attributes #6 = { nofree norecurse
nounwind willreturn }<br>
>> ; CHECK: attributes #7 = { argmemonly nofree
nosync nounwind <br>
>> willreturn }<br>
>><br>
>> diff --git
a/llvm/test/Other/cgscc-devirt-iteration.ll <br>
>> b/llvm/test/Other/cgscc-devirt-iteration.ll<br>
>> index 9a5a2a79d65fb..651b7f3b28539 100644<br>
>> --- a/llvm/test/Other/cgscc-devirt-iteration.ll<br>
>> +++ b/llvm/test/Other/cgscc-devirt-iteration.ll<br>
>> @@ -28,7 +28,7 @@ declare void @unknown()<br>
>> define void @test1() {<br>
>> ; BEFORE-NOT: Function Attrs<br>
>> -; AFTER: Function Attrs: readnone<br>
>> +; AFTER: Function Attrs: nosync readnone<br>
>> ; CHECK-LABEL: define void @test1()<br>
>> entry:<br>
>> %fptr = alloca void ()*<br>
>> @@ -57,7 +57,7 @@ declare void
@readnone_with_arg(void ()**) readnone<br>
>> define void @test2_a(void ()** %ignore) {<br>
>> ; BEFORE-NOT: Function Attrs<br>
>> ; AFTER1: Function Attrs: readonly<br>
>> -; AFTER2: Function Attrs: readnone<br>
>> +; AFTER2: Function Attrs: nosync readnone<br>
>> ; BEFORE: define void @test2_a(void ()**
%ignore)<br>
>> ; AFTER: define void @test2_a(void ()**
readnone %ignore)<br>
>> entry:<br>
>> @@ -78,7 +78,7 @@ entry:<br>
>> define void @test2_b() {<br>
>> ; BEFORE-NOT: Function Attrs<br>
>> ; AFTER1: Function Attrs: readonly<br>
>> -; AFTER2: Function Attrs: readnone<br>
>> +; AFTER2: Function Attrs: nosync readnone<br>
>> ; CHECK-LABEL: define void @test2_b()<br>
>> entry:<br>
>> %f2ptr = alloca void ()*<br>
>><br>
>> diff --git
a/llvm/test/Other/cgscc-iterate-function-mutation.ll <br>
>>
b/llvm/test/Other/cgscc-iterate-function-mutation.ll<br>
>> index 6689639311bd0..470f9055ced70 100644<br>
>> ---
a/llvm/test/Other/cgscc-iterate-function-mutation.ll<br>
>> +++
b/llvm/test/Other/cgscc-iterate-function-mutation.ll<br>
>> @@ -1,8 +1,8 @@<br>
>> ; RUN: opt -aa-pipeline=basic-aa <br>
>>
-passes='cgscc(function-attrs,function(simplify-cfg))'
-S < %s | <br>
>> FileCheck %s<br>
>> -declare void @readnone() readnone<br>
>> +declare void @readnone() nosync readnone<br>
>> declare void @unknown()<br>
>> -declare void
@reference_function_pointer(void()*) readnone<br>
>> +declare void
@reference_function_pointer(void()*) nosync readnone<br>
>> ; The @test1_* set of functions checks that
when we mutate <br>
>> functions with<br>
>> ; simplify-cfg to delete call edges and this
ends up splitting both <br>
>> the SCCs<br>
>> @@ -338,4 +338,4 @@ exit:<br>
>> ret void<br>
>> }<br>
>> -; CHECK: attributes #0 = { readnone }<br>
>> +; CHECK: attributes #0 = { nosync readnone }<br>
>><br>
>> diff --git
a/llvm/test/Other/cgscc-observe-devirt.ll <br>
>> b/llvm/test/Other/cgscc-observe-devirt.ll<br>
>> index 3b35f0edc1206..67d630b23a332 100644<br>
>> --- a/llvm/test/Other/cgscc-observe-devirt.ll<br>
>> +++ b/llvm/test/Other/cgscc-observe-devirt.ll<br>
>> @@ -10,7 +10,7 @@<br>
>> ; without requiring the outer manager to
iterate doesn't break any <br>
>> invariant.<br>
>> ; RUN: opt -aa-pipeline=basic-aa <br>
>>
-passes='cgscc(function-attrs,function(gvn),function-attrs)'
-S < %s <br>
>> | FileCheck %s --check-prefix=AFTER<br>
>> -declare void @readnone() readnone<br>
>> +declare void @readnone() nosync readnone<br>
>> declare void @unknown()<br>
>> ; The @test1_* checks that if we refine an
indirect call to a <br>
>> direct call and<br>
>> @@ -103,4 +103,4 @@ define void @test2_b3() {<br>
>> ret void<br>
>> }<br>
>> -; CHECK: attributes #0 = { readnone }<br>
>> +; CHECK: attributes #0 = { nosync readnone }<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/atomic.ll <br>
>> b/llvm/test/Transforms/FunctionAttrs/atomic.ll<br>
>> index 313c54b5ed3ef..3208595684fc7 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/atomic.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/atomic.ll<br>
>> @@ -20,5 +20,5 @@ entry:<br>
>> ret i32 %r<br>
>> }<br>
>> -; CHECK: attributes #0 = { norecurse
nounwind readnone ssp uwtable <br>
>> willreturn }<br>
>> +; CHECK: attributes #0 = { norecurse nosync
nounwind readnone ssp <br>
>> uwtable willreturn }<br>
>> ; CHECK: attributes #1 = { nofree norecurse
nounwind ssp uwtable <br>
>> willreturn }<br>
>><br>
>> diff --git <br>
>>
a/llvm/test/Transforms/FunctionAttrs/incompatible_fn_attrs.ll
<br>
>>
b/llvm/test/Transforms/FunctionAttrs/incompatible_fn_attrs.ll<br>
>> index 4701de3f2e54b..e913aca20c58e 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/incompatible_fn_attrs.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/incompatible_fn_attrs.ll<br>
>> @@ -28,5 +28,5 @@ entry:<br>
>> attributes #0 = { argmemonly }<br>
>> attributes #1 = { inaccessiblememonly }<br>
>> attributes #2 = {
inaccessiblemem_or_argmemonly }<br>
>> -; CHECK: attributes #0 = { norecurse nounwind
readnone willreturn }<br>
>> +; CHECK: attributes #0 = { norecurse nosync
nounwind readnone <br>
>> willreturn }<br>
>> ; CHECK-NOT: attributes<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll
<br>
>>
b/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll<br>
>> index ef9d086f8f17a..ce33b4c3738cc 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll<br>
>> @@ -12,7 +12,7 @@ declare void @_ZdaPv(i8*)
local_unnamed_addr #2<br>
>> ; TEST 1 (positive case)<br>
>> -; FNATTR: Function Attrs: noinline norecurse
nounwind readnone uwtable<br>
>> +; FNATTR: Function Attrs: noinline norecurse
nosync nounwind <br>
>> readnone uwtable<br>
>> ; FNATTR-NEXT: define void @only_return()<br>
>> define void @only_return() #0 {<br>
>> ret void<br>
>> @@ -78,14 +78,14 @@ end:<br>
>> ; }<br>
>> -; FNATTR: Function Attrs: noinline
nounwind readnone uwtable<br>
>> +; FNATTR: Function Attrs: noinline nosync
nounwind readnone uwtable<br>
>> ; FNATTR-NEXT: define void
@mutual_recursion1()<br>
>> define void @mutual_recursion1() #0 {<br>
>> call void @mutual_recursion2()<br>
>> ret void<br>
>> }<br>
>> -; FNATTR: Function Attrs: noinline nounwind
readnone uwtable<br>
>> +; FNATTR: Function Attrs: noinline nosync
nounwind readnone uwtable<br>
>> ; FNATTR-NEXT: define void
@mutual_recursion2()<br>
>> define void @mutual_recursion2() #0 {<br>
>> call void @mutual_recursion1()<br>
>> @@ -132,7 +132,7 @@ define noalias i8*
@call_realloc(i8* nocapture <br>
>> %0, i64 %1) local_unnamed_addr #0<br>
>> ; FNATTR-NEXT: declare void
@nofree_function()<br>
>> declare void @nofree_function() nofree
readnone #0<br>
>> -; FNATTR: Function Attrs: noinline nounwind
readnone uwtable<br>
>> +; FNATTR: Function Attrs: noinline nosync
nounwind readnone uwtable<br>
>> ; FNATTR-NEXT: define void
@call_nofree_function()<br>
>> define void @call_nofree_function() #0 {<br>
>> tail call void @nofree_function()<br>
>> @@ -168,7 +168,7 @@ define void @call_both() #0
{<br>
>> ; TEST 10 (positive case)<br>
>> ; Call intrinsic function<br>
>> -; FNATTRS: Function Attrs: noinline readnone
speculatable<br>
>> +; FNATTRS: Function Attrs: noinline nosync
readnone speculatable<br>
>> ; FNATTRS-NEXT: declare float
@llvm.floor.f32(float %0)<br>
>> declare float @llvm.floor.f32(float)<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/norecurse.ll <br>
>>
b/llvm/test/Transforms/FunctionAttrs/norecurse.ll<br>
>> index cc48dda663c5e..f5af6406e2a43 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/norecurse.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/norecurse.ll<br>
>> @@ -2,7 +2,7 @@<br>
>> ; RUN: opt < %s -aa-pipeline=basic-aa <br>
>>
-passes='cgscc(function-attrs),rpo-function-attrs' -S |
FileCheck %s<br>
>> ; CHECK: Function Attrs<br>
>> -; CHECK-SAME: norecurse nounwind readnone<br>
>> +; CHECK-SAME: norecurse nosync nounwind
readnone<br>
>> ; CHECK-NEXT: define i32 @leaf()<br>
>> define i32 @leaf() {<br>
>> ret i32 1<br>
>> @@ -61,7 +61,7 @@ define void @intrinsic(i8*
%dest, i8* %src, i32 <br>
>> %len) {<br>
>> declare void @llvm.memcpy.p0i8.p0i8.i32(i8*,
i8*, i32, i1)<br>
>> ; CHECK: Function Attrs<br>
>> -; CHECK-SAME: norecurse readnone<br>
>> +; CHECK-SAME: norecurse nosync readnone<br>
>> ; FIXME: missing "norecurse"<br>
>> ; CHECK-NEXT: define internal i32
@called_by_norecurse()<br>
>> define internal i32 @called_by_norecurse() {<br>
>> @@ -76,7 +76,7 @@ define void @m() norecurse {<br>
>> }<br>
>> ; CHECK: Function Attrs<br>
>> -; CHECK-SAME: norecurse readnone<br>
>> +; CHECK-SAME: norecurse nosync readnone<br>
>> ; FIXME: missing "norecurse"<br>
>> ; CHECK-NEXT: define internal i32
@called_by_norecurse_indirectly()<br>
>> define internal i32
@called_by_norecurse_indirectly() {<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/nosync.ll <br>
>> b/llvm/test/Transforms/FunctionAttrs/nosync.ll<br>
>> index 8d578e6b67fc7..28eb51e9df0cd 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/nosync.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/nosync.ll<br>
>> @@ -4,7 +4,7 @@<br>
>> ; Base case, empty function<br>
>> define void @test1() {<br>
>> -; CHECK: Function Attrs: norecurse nounwind
readnone willreturn<br>
>> +; CHECK: Function Attrs: norecurse nosync
nounwind readnone willreturn<br>
>> ; CHECK-LABEL: @test1(<br>
>> ; CHECK-NEXT: ret void<br>
>> ;<br>
>> @@ -13,7 +13,7 @@ define void @test1() {<br>
>> ; Show the bottom up walk<br>
>> define void @test2() {<br>
>> -; CHECK: Function Attrs: norecurse nounwind
readnone willreturn<br>
>> +; CHECK: Function Attrs: norecurse nosync
nounwind readnone willreturn<br>
>> ; CHECK-LABEL: @test2(<br>
>> ; CHECK-NEXT: call void @test1()<br>
>> ; CHECK-NEXT: ret void<br>
>> @@ -36,7 +36,7 @@ define void @test3()
convergent {<br>
>> }<br>
>> define i32 @test4(i32 %a, i32 %b) {<br>
>> -; CHECK: Function Attrs: norecurse nounwind
readnone willreturn<br>
>> +; CHECK: Function Attrs: norecurse nosync
nounwind readnone willreturn<br>
>> ; CHECK-LABEL: @test4(<br>
>> ; CHECK-NEXT: [[ADD:%.*]] = add i32
[[A:%.*]], [[B:%.*]]<br>
>> ; CHECK-NEXT: ret i32 [[A]]<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/nounwind.ll <br>
>>
b/llvm/test/Transforms/FunctionAttrs/nounwind.ll<br>
>> index 57518f4870cc6..6a667cf73b1e7 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/nounwind.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/nounwind.ll<br>
>> @@ -1,14 +1,14 @@<br>
>> ; RUN: opt < %s -function-attrs -S |
FileCheck %s<br>
>> ; TEST 1<br>
>> -; CHECK: Function Attrs: norecurse nounwind
readnone<br>
>> +; CHECK: Function Attrs: norecurse nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define i32 @foo1()<br>
>> define i32 @foo1() {<br>
>> ret i32 1<br>
>> }<br>
>> ; TEST 2<br>
>> -; CHECK: Function Attrs: nounwind readnone<br>
>> +; CHECK: Function Attrs: nosync nounwind
readnone<br>
>> ; CHECK-NEXT: define i32 @scc1_foo()<br>
>> define i32 @scc1_foo() {<br>
>> %1 = call i32 @scc1_bar()<br>
>> @@ -17,7 +17,7 @@ define i32 @scc1_foo() {<br>
>> ; TEST 3<br>
>> -; CHECK: Function Attrs: nounwind readnone<br>
>> +; CHECK: Function Attrs: nosync nounwind
readnone<br>
>> ; CHECK-NEXT: define i32 @scc1_bar()<br>
>> define i32 @scc1_bar() {<br>
>> %1 = call i32 @scc1_foo()<br>
>><br>
>> diff --git
a/llvm/test/Transforms/FunctionAttrs/optnone.ll <br>
>> b/llvm/test/Transforms/FunctionAttrs/optnone.ll<br>
>> index 9455a2ae40a01..850142762140a 100644<br>
>> ---
a/llvm/test/Transforms/FunctionAttrs/optnone.ll<br>
>> +++
b/llvm/test/Transforms/FunctionAttrs/optnone.ll<br>
>> @@ -20,6 +20,6 @@ declare i8 @strlen(i8*)
noinline optnone<br>
>> ; CHECK: (i8*) #1<br>
>> ; CHECK-LABEL: attributes #0<br>
>> -; CHECK: = { norecurse nounwind readnone
willreturn }<br>
>> +; CHECK: = { norecurse nosync nounwind
readnone willreturn }<br>
>> ; CHECK-LABEL: attributes #1<br>
>> ; CHECK: = { noinline optnone }<br>
>><br>
>> diff --git
a/llvm/test/Transforms/Inline/cgscc-update.ll <br>
>> b/llvm/test/Transforms/Inline/cgscc-update.ll<br>
>> index b251a5d070c6e..024d57a13d8fc 100644<br>
>> ---
a/llvm/test/Transforms/Inline/cgscc-update.ll<br>
>> +++
b/llvm/test/Transforms/Inline/cgscc-update.ll<br>
>> @@ -27,7 +27,7 @@ entry:<br>
>> }<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test1_g()<br>
>> define void @test1_g() noinline {<br>
>> entry:<br>
>> @@ -36,7 +36,7 @@ entry:<br>
>> }<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test1_h()<br>
>> define void @test1_h() noinline {<br>
>> entry:<br>
>> @@ -59,7 +59,7 @@ entry:<br>
>> }<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test2_g()<br>
>> define void @test2_g() noinline {<br>
>> entry:<br>
>> @@ -69,7 +69,7 @@ entry:<br>
>> }<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test2_h()<br>
>> define void @test2_h() noinline {<br>
>> entry:<br>
>> @@ -152,7 +152,7 @@ exit:<br>
>> ; form a new SCC and should use that can
deduce precise function <br>
>> attrs.<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test4_f1()<br>
>> define void @test4_f1() noinline {<br>
>> entry:<br>
>> @@ -175,7 +175,7 @@ entry:<br>
>> }<br>
>> ; This function should have had 'readnone'
deduced for its SCC.<br>
>> -; CHECK: Function Attrs: noinline nounwind
readnone<br>
>> +; CHECK: Function Attrs: noinline nosync
nounwind readnone<br>
>> ; CHECK-NEXT: define void @test4_h()<br>
>> define void @test4_h() noinline {<br>
>> entry:<br>
>><br>
>><br>
>>
_______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-commits@lists.llvm.org</a><br>
>> <a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-commits@lists.llvm.org</a><br>
> <a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-commits@lists.llvm.org</a><br>
<a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
rel="noreferrer" target="_blank"
moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote>
</div>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank"
moz-do-not-send="true">llvm-commits@lists.llvm.org</a><br>
<a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote>
</div>
</div>
</blockquote>
</body>
</html>