arsenm added inline comments.

================
Comment at: clang/lib/CodeGen/CGExpr.cpp:102-106
+      auto *EBB = AllocaInsertPt->getParent();
+      auto Iter = AllocaInsertPt->getIterator();
+      if (Iter != EBB->end())
+        ++Iter;
+      Builder.SetInsertPoint(EBB, Iter);
----------------
hsmhsm wrote:
> arsenm wrote:
> > Where are the addrspacecasts inserted? Could you just adjust where those 
> > are inserted instead?
> The addressspace casts are inserted immediately after all static allocas (top 
> static alloca cluster).
> 
> An example:
> 
> Before this patch:
> 
> ```
> entry:
>   %N.addr = alloca i64, align 8, addrspace(5)
>   %N.addr.ascast = addrspacecast i64 addrspace(5)* %N.addr to i64*
>   %vla.addr = alloca i64, align 8, addrspace(5)
>   %vla.addr.ascast = addrspacecast i64 addrspace(5)* %vla.addr to i64*
>   %a.addr = alloca i32*, align 8, addrspace(5)
>   %a.addr.ascast = addrspacecast i32* addrspace(5)* %a.addr to i32**
>   %vla.addr2 = alloca i64, align 8, addrspace(5)
>   %vla.addr2.ascast = addrspacecast i64 addrspace(5)* %vla.addr2 to i64*
>   %b.addr = alloca i32*, align 8, addrspace(5)
>   %b.addr.ascast = addrspacecast i32* addrspace(5)* %b.addr to i32**
>   %N.casted = alloca i64, align 8, addrspace(5)
>   %N.casted.ascast = addrspacecast i64 addrspace(5)* %N.casted to i64*
>   %.zero.addr = alloca i32, align 4, addrspace(5)
>   %.zero.addr.ascast = addrspacecast i32 addrspace(5)* %.zero.addr to i32*
>   %.threadid_temp. = alloca i32, align 4, addrspace(5)
>   %.threadid_temp..ascast = addrspacecast i32 addrspace(5)* %.threadid_temp. 
> to i32*  
>   store i64 %N, i64* %N.addr.ascast, align 8
> ```
> 
> With this patch:
> 
> ```
> entry:
>   %N.addr = alloca i64, align 8, addrspace(5)
>   %vla.addr = alloca i64, align 8, addrspace(5)
>   %a.addr = alloca i32*, align 8, addrspace(5)
>   %vla.addr2 = alloca i64, align 8, addrspace(5)
>   %b.addr = alloca i32*, align 8, addrspace(5)
>   %N.casted = alloca i64, align 8, addrspace(5)
>   %.zero.addr = alloca i32, align 4, addrspace(5)
>   %.threadid_temp. = alloca i32, align 4, addrspace(5)
>   %.threadid_temp..ascast = addrspacecast i32 addrspace(5)* %.threadid_temp. 
> to i32*
>   %.zero.addr.ascast = addrspacecast i32 addrspace(5)* %.zero.addr to i32*
>   %N.casted.ascast = addrspacecast i64 addrspace(5)* %N.casted to i64*
>   %b.addr.ascast = addrspacecast i32* addrspace(5)* %b.addr to i32**
>   %vla.addr2.ascast = addrspacecast i64 addrspace(5)* %vla.addr2 to i64*
>   %a.addr.ascast = addrspacecast i32* addrspace(5)* %a.addr to i32**
>   %vla.addr.ascast = addrspacecast i64 addrspace(5)* %vla.addr to i64*
>   %N.addr.ascast = addrspacecast i64 addrspace(5)* %N.addr to i64*
>   store i64 %N, i64* %N.addr.ascast, align 8
> ```
I meant where in the clang code are these emitted, and how is that I set point 
found?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110257/new/

https://reviews.llvm.org/D110257

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

Reply via email to