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