<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>