diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-11-13 02:05:15 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-11-13 02:05:15 +0000 |
commit | b369f449245720eda2f31d11ac25f49b7fee43ec (patch) | |
tree | f6e3ee869ce6450e8ebad5cdf5199d65fc4a9096 /clang/lib/CodeGen/CGExpr.cpp | |
parent | 4f10a3e9f058bb8fdcfc3799a1939d1391b96de3 (diff) | |
download | bcm5719-llvm-b369f449245720eda2f31d11ac25f49b7fee43ec.tar.gz bcm5719-llvm-b369f449245720eda2f31d11ac25f49b7fee43ec.zip |
Fix IR generation for bool on PPC (and any other target where bool is not 8 bits in memory).
PR11777.
llvm-svn: 167802
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index d1a2889f9ab..393d3b9704a 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -935,8 +935,8 @@ llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(QualType Ty) { llvm::APInt Min; llvm::APInt End; if (IsBool) { - Min = llvm::APInt(8, 0); - End = llvm::APInt(8, 2); + Min = llvm::APInt(getContext().getTypeSize(Ty), 0); + End = llvm::APInt(getContext().getTypeSize(Ty), 2); } else { const EnumDecl *ED = ET->getDecl(); llvm::Type *LTy = ConvertTypeForMem(ED->getIntegerType()); @@ -1031,8 +1031,9 @@ llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) { // This should really always be an i1, but sometimes it's already // an i8, and it's awkward to track those cases down. if (Value->getType()->isIntegerTy(1)) - return Builder.CreateZExt(Value, Builder.getInt8Ty(), "frombool"); - assert(Value->getType()->isIntegerTy(8) && "value rep of bool not i1/i8"); + return Builder.CreateZExt(Value, ConvertTypeForMem(Ty), "frombool"); + assert(Value->getType()->isIntegerTy(getContext().getTypeSize(Ty)) && + "wrong value rep of bool"); } return Value; @@ -1041,7 +1042,8 @@ llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) { llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) { // Bool has a different representation in memory than in registers. if (hasBooleanRepresentation(Ty)) { - assert(Value->getType()->isIntegerTy(8) && "memory rep of bool not i8"); + assert(Value->getType()->isIntegerTy(getContext().getTypeSize(Ty)) && + "wrong value rep of bool"); return Builder.CreateTrunc(Value, Builder.getInt1Ty(), "tobool"); } |