forked from OSchip/llvm-project
CodeGen: Let byval parameter use alloca address space
Differential Revision: https://reviews.llvm.org/D32133 llvm-svn: 300487
This commit is contained in:
parent
ef700d550e
commit
d7523283a7
|
@ -1586,9 +1586,10 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
|
|||
|
||||
case ABIArgInfo::Indirect: {
|
||||
assert(NumIRArgs == 1);
|
||||
// indirect arguments are always on the stack, which is addr space #0.
|
||||
// indirect arguments are always on the stack, which is alloca addr space.
|
||||
llvm::Type *LTy = ConvertTypeForMem(it->type);
|
||||
ArgTypes[FirstIRArg] = LTy->getPointerTo();
|
||||
ArgTypes[FirstIRArg] = LTy->getPointerTo(
|
||||
CGM.getDataLayout().getAllocaAddrSpace());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - -triple amdgcn %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -triple amdgcn---amdgizcl %s | FileCheck %s -check-prefix=AMDGIZ
|
||||
|
||||
struct A {
|
||||
int x[100];
|
||||
};
|
||||
|
||||
int f(struct A a);
|
||||
|
||||
int g() {
|
||||
struct A a;
|
||||
// CHECK: call i32 @f(%struct.A* byval{{.*}}%a)
|
||||
// AMDGIZ: call i32 @f(%struct.A addrspace(5)* byval{{.*}}%a)
|
||||
return f(a);
|
||||
}
|
||||
|
||||
// CHECK: declare i32 @f(%struct.A* byval{{.*}})
|
||||
// AMDGIZ: declare i32 @f(%struct.A addrspace(5)* byval{{.*}})
|
Loading…
Reference in New Issue