summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaxun Liu <Yaxun.Liu@amd.com>2017-10-23 17:49:26 +0000
committerYaxun Liu <Yaxun.Liu@amd.com>2017-10-23 17:49:26 +0000
commitbd3823618da09ecc9cef482aa4a81d5a638c3e2b (patch)
treeab3c64630b779bd3049b4fa4d43a265bf477f2ab
parentf651698488ba104b2e4c4d8d5a8f562ef2b2a498 (diff)
downloadbcm5719-llvm-bd3823618da09ecc9cef482aa4a81d5a638c3e2b.tar.gz
bcm5719-llvm-bd3823618da09ecc9cef482aa4a81d5a638c3e2b.zip
CodeGen: Fix invalid bitcast in partial initialization of automatic arrary variable
Differential Revision: https://reviews.llvm.org/D39184 llvm-svn: 316353
-rw-r--r--clang/lib/CodeGen/CGDecl.cpp2
-rw-r--r--clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl8
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 707f8a555cf..44a6db4750f 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -1266,7 +1266,7 @@ void CodeGenFunction::EmitAutoVarInit(const AutoVarEmission &emission) {
llvm::ConstantInt::get(IntPtrTy,
getContext().getTypeSizeInChars(type).getQuantity());
- llvm::Type *BP = Int8PtrTy;
+ llvm::Type *BP = AllocaInt8PtrTy;
if (Loc.getType() != BP)
Loc = Builder.CreateBitCast(Loc, BP);
diff --git a/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl b/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
index 19287c7d899..fefe1c4a41d 100644
--- a/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
+++ b/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
@@ -58,3 +58,11 @@ void func2(void) {
const int lvc = 4;
lv1 = lvc;
}
+
+// CHECK-LABEL: define void @func3()
+// CHECK: %a = alloca [16 x [1 x float]], align 4, addrspace(5)
+// CHECK: %[[CAST:.+]] = bitcast [16 x [1 x float]] addrspace(5)* %a to i8 addrspace(5)*
+// CHECK: call void @llvm.memset.p5i8.i64(i8 addrspace(5)* %[[CAST]], i8 0, i64 64, i32 4, i1 false)
+void func3(void) {
+ float a[16][1] = {{0.}};
+}
OpenPOWER on IntegriCloud