From 75c47a5cdf480571a71935cf80d49f802fec15a3 Mon Sep 17 00:00:00 2001 From: Sanjiv Gupta Date: Wed, 8 Apr 2009 04:16:39 +0000 Subject: Pointer width on targets like PIC16 is 16-bit, while the valid index size to GEP is only 32 or 64. So promote index to 32 in such cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68590 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExpr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lib/CodeGen/CGExpr.cpp') diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 9067787f32..4a7171ebd8 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -799,8 +799,11 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { QualType IdxTy = E->getIdx()->getType(); bool IdxSigned = IdxTy->isSignedIntegerType(); unsigned IdxBitwidth = cast(Idx->getType())->getBitWidth(); - if (IdxBitwidth != LLVMPointerWidth) - Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth), + + // If Pointer width is less than 32 than extend to 32. + unsigned IdxValidWidth = (LLVMPointerWidth < 32 ) ? 32 : LLVMPointerWidth; + if (IdxBitwidth != IdxValidWidth) + Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(IdxValidWidth), IdxSigned, "idxprom"); // We know that the pointer points to a type of the correct size, unless the -- cgit v1.2.3-70-g09d2