zahiraam wrote:

> > > > > > How does this interact with #107598?
> > > > > 
> > > > > 
> > > > > Though this also changes things to ensure when TBAA data is set, it's 
> > > > > always set on the call.
> > > > 
> > > > 
> > > > Wasn't already doing that? (setting the TBAA on the call?).
> > > 
> > > 
> > > It was setting it on `cast<llvm::Instruction>(Call.getScalarVal())` not 
> > > necessarily the call (which you can get via an output on `EmitCall()`). 
> > > At least in this case that meant it was putting the TBAA metadata on the 
> > > `load x86_fp80` after the call. I'm not sure if there's other cases where 
> > > something similar could happen.
> > 
> > 
> > > > > > How does this interact with #107598?
> > > > > 
> > > > > 
> > > > > Though this also changes things to ensure when TBAA data is set, it's 
> > > > > always set on the call.
> > > > 
> > > > 
> > > > Wasn't already doing that? (setting the TBAA on the call?).
> > > 
> > > 
> > > It was setting it on `cast<llvm::Instruction>(Call.getScalarVal())` not 
> > > necessarily the call (which you can get via an output on `EmitCall()`). 
> > > At least in this case that meant it was putting the TBAA metadata on the 
> > > `load x86_fp80` after the call. I'm not sure if there's other cases where 
> > > something similar could happen.
> > 
> > 
> > Without this patch and without (#107598) the function `pow` doesn't 
> > generate `int TBAA` info on the call, but it does on a call to `cargl` with 
> > `-triple aarch64-unknown-unknown`.
> > `# | %call = tail call fp128 @cargl([2 x fp128] noundef alignstack(16) 
> > undef) #1, !tbaa !2`
> 
> I'm not sure I follow, but the issue I spotted was "int" TBAA metadata was 
> being set on the load following the `pow` call, but it has the same root 
> cause as the `cargl` issue.
> 
> See the diff from the first commit:
> 
> ```diff
> diff --git a/clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c 
> b/clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c
> index dd013dcc8b3ca8..56c6b3ec00bc7e 100644
> --- a/clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c
> +++ b/clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c
> @@ -19,7 +19,7 @@ long double powl(long double a, long double b);
>  // CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 16, ptr nonnull 
> [[BYVAL_TEMP1]]) #[[ATTR3]]
>  // CHECK-NEXT:    store x86_fp80 0xK40008000000000000000, ptr 
> [[BYVAL_TEMP1]], align 16, !tbaa [[TBAA3]]
>  // CHECK-NEXT:    call void @powl(ptr dead_on_unwind nonnull writable 
> sret(x86_fp80) align 16 [[TMP]], ptr noundef nonnull [[BYVAL_TEMP]], ptr 
> noundef nonnull [[BYVAL_TEMP1]]) #[[ATTR3]]
> -// CHECK-NEXT:    [[TMP0:%.*]] = load x86_fp80, ptr [[TMP]], align 16, !tbaa 
> [[TBAA7:![0-9]+]]
> +// CHECK-NEXT:    [[TMP0:%.*]] = load x86_fp80, ptr [[TMP]], align 16, !tbaa 
> [[TBAA3]]
>  // CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 16, ptr nonnull 
> [[BYVAL_TEMP]]) #[[ATTR3]]
>  // CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 16, ptr nonnull 
> [[BYVAL_TEMP1]]) #[[ATTR3]]
>  // CHECK-NEXT:    store x86_fp80 [[TMP0]], ptr [[AGG_RESULT]], align 16, 
> !tbaa [[TBAA3]]
> @@ -33,6 +33,4 @@ long double test_powl() {
>  // CHECK: [[META4]] = !{!"long double", [[META5:![0-9]+]], i64 0}
>  // CHECK: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}
>  // CHECK: [[META6]] = !{!"Simple C/C++ TBAA"}
> -// CHECK: [[TBAA7]] = !{[[META8:![0-9]+]], [[META8]], i64 0}
> -// CHECK: [[META8]] = !{!"int", [[META5]], i64 0}
>  //.
> ```
> 
> > but it does on a call to cargl with `-triple aarch64-unknown-unknown`.
> > `> `# |   %call = tail call fp128 @cargl([2 x fp128] noundef alignstack(16) 
> > undef) #1, !tbaa !2`
> 
> That looks okay though? It's not passing or returning values via pointers, so 
> it should be safe to set the "int" TBAA (which indicates the only pointer it 
> could read is errno).

Not really! `int TBAA` in in our downstream compiler is interpreted as 
describing the function arguments (they are not int) and the `load/store` of 
the argument before the library call are begin eliminated which result in 
unexpected behavior.
I am not objecting to anything; I am just wondering what difference it makes to 
have the TBAA attached to the call instead of how it is now.

https://github.com/llvm/llvm-project/pull/108853
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to