diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-03 02:11:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-03 02:11:28 +0000 |
commit | fa4e35aca7dba138e9df5f6939238a91f2036486 (patch) | |
tree | e55729ee3ce15870fd860dec255e2b79b9456e0e | |
parent | 6aa6b1f263e09f16f348bd65cd97ca1e1feba3da (diff) | |
download | llvm-fa4e35aca7dba138e9df5f6939238a91f2036486.tar.gz |
fix a bitcode reader bug where it can't handle extractelement correctly:
the index of the value being extracted is always an i32. This fixes PR3465
llvm-svn: 63597
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Bitcode/extractelement.ll | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 87700284c483..adffe8292027 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -915,8 +915,7 @@ bool BitcodeReader::ParseConstants() { dyn_cast_or_null<VectorType>(getTypeByID(Record[0])); if (OpTy == 0) return Error("Invalid CE_EXTRACTELT record"); Constant *Op0 = ValueList.getConstantFwdRef(Record[1], OpTy); - Constant *Op1 = ValueList.getConstantFwdRef(Record[2], - OpTy->getElementType()); + Constant *Op1 = ValueList.getConstantFwdRef(Record[2], Type::Int32Ty); V = ConstantExpr::getExtractElement(Op0, Op1); break; } diff --git a/llvm/test/Bitcode/extractelement.ll b/llvm/test/Bitcode/extractelement.ll new file mode 100644 index 000000000000..04cb131f6e7f --- /dev/null +++ b/llvm/test/Bitcode/extractelement.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | opt -constprop | llvm-dis +; PR3465 + +define double @test() { + %tmp24 = extractelement <2 x double> bitcast (<1 x i128> < i128 85070591730234615870450834276742070272 > to <2 x double>), i32 0 + ret double %tmp24 +} + |