(original) (raw)

Hello,

With the following reduced test case, cmd “opt -always-inline t.ll” crashes after inlining. Notice that byval argument %a will be remapped to %1 below, and consequently produces an illegal store.

%1 = alloca i32, align 4

store i32 \* %1, i32 addrspace(1)\*\* %a.addr, align 8

Looks like Inliner assumes that byval arguments are from address space 0\. Or this is just a bug in inliner?

Thanks,

Wei

t.ll:

define i32 @foo(i32 addrspace(1)\* %x) {

entry:

%y = call i32 @bar(i32 addrspace(1)\* %x)

ret i32 %y

}

define internal i32 @bar(i32 addrspace(1)\* byval %a) alwaysinline {

%a.addr = alloca i32 addrspace(1)\*, align 8

store i32 addrspace(1)\* %a, i32 addrspace(1)\*\* %a.addr, align 8

%a1 = load i32 addrspace(1)\* , i32 addrspace(1)\*\* %a.addr, align 8

%b = load i32, i32 addrspace(1)\* %a1, align 4

ret i32 %b

}