Sorry I formatted my reply badly, there are responses inline in the previous 
message

> -----Original Message-----
> From: Blower, Melanie
> Sent: Wednesday, March 13, 2019 2:06 PM
> To: 'reviews+d59307+public+153a08d52e63c...@reviews.llvm.org'
> <reviews+d59307+public+153a08d52e63c...@reviews.llvm.org>; cfe-
> comm...@lists.llvm.org; Keane, Erich <erich.ke...@intel.com>;
> rich...@metafoo.co.uk; r...@google.com; jfbast...@apple.com
> Cc: jdoerf...@anl.gov; mlek...@skidmore.edu; blitzrak...@gmail.com;
> shen...@google.com
> Subject: RE: [PATCH] D59307: Patch llvm bug 41033 concerning atomicity of
> statement expressions
> 
> Yes the IR looks a bit odd. I should use a simpler case with a global _Atomic 
> int a
> instead of the parameter. The store is the parameter value a, if I move that 
> to a
> global then it won't be as confusing.
> 
> > -----Original Message-----
> > From: JF Bastien via Phabricator [mailto:revi...@reviews.llvm.org]
> > Sent: Wednesday, March 13, 2019 12:57 PM
> > To: Blower, Melanie <melanie.blo...@intel.com>;
> > cfe-commits@lists.llvm.org; Keane, Erich <erich.ke...@intel.com>;
> > rich...@metafoo.co.uk; r...@google.com; jfbast...@apple.com
> > Cc: jdoerf...@anl.gov; mlek...@skidmore.edu; blitzrak...@gmail.com;
> > shen...@google.com
> > Subject: [PATCH] D59307: Patch llvm bug 41033 concerning atomicity of
> > statement expressions
> >
> > jfb requested changes to this revision.
> > jfb added a comment.
> > This revision now requires changes to proceed.
> >
> > I think you also want to test C++ `std::atomic` as well as regular 
> > `volatile`.
> >
> >
> >
> > ================
> > Comment at: test/Sema/atomic-expr-stmt.c:7
> > +  //CHECK: %atomic-load = load atomic i32, i32* %a.addr seq_cst,
> > + align
> > + 4
> > +  //CHECK: store atomic i32 %atomic-load, i32* %tmp seq_cst, align 4
> > +  //CHECK: %0 = load i32, i32* %tmp, align 4
> > ----------------
> > Why is there a store to `a` here?
> [Blower, Melanie] Yes the IR looks a bit odd. I can use a simpler case with a
> global _Atomic int a instead of the parameter. But it does seem like the 
> "store
> atomic" to tmp shouldn't exist.  The %tmp is the value returned by the 
> StmtExpr.
> Since the atomic load has already occurred, the value returned by StmtExpr
> could just be %atomic-load. Without the StmtExpr, there's just the atomic 
> load,
> which is then stored into b.
> 
> I changed the test like this, and the IR follows _Atomic int a; void 
> test_assign(int
> b) {
>   // assignment is OK
>   b = ({a;});
> }
> 
> ; Function Attrs: noinline nounwind optnone define void @test_assign(i32 %b) 
> #0
> {
> entry:
>   %b.addr = alloca i32, align 4
>   %tmp = alloca i32, align 4
>   store i32 %b, i32* %b.addr, align 4
>   %atomic-load = load atomic i32, i32* @a seq_cst, align 4
>   store atomic i32 %atomic-load, i32* %tmp seq_cst, align 4
>   %0 = load i32, i32* %tmp, align 4
>   store i32 %0, i32* %b.addr, align 4
>   ret void
> }
> >
> >
> > ================
> > Comment at: test/Sema/atomic-expr-stmt.c:9
> > +  //CHECK: %0 = load i32, i32* %tmp, align 4
> > +  //CHECK: store i32 %0, i32* %b.addr, align 4 }
> > ----------------
> > What's in `%tmp`? I'd expect the value loaded from `a` to be stored to `b`.
> >
> >
> > Repository:
> >   rC Clang
> >
> > CHANGES SINCE LAST ACTION
> >   https://reviews.llvm.org/D59307/new/
> >
> > https://reviews.llvm.org/D59307
> >
> >

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to