diff options
author | Zhou Sheng <zhousheng00@gmail.com> | 2007-05-26 03:43:13 +0000 |
---|---|---|
committer | Zhou Sheng <zhousheng00@gmail.com> | 2007-05-26 03:43:13 +0000 |
commit | 924361aef931a8f0c366b1090021d5be13c37c6b (patch) | |
tree | 0d913876bb1427872bed661e917faf3c667e40b8 /lib/CodeGen/IntrinsicLowering.cpp | |
parent | 3adf951364c30d30b528133df1d4cedf2c2b7046 (diff) |
Correct the logic in LowerPartSet which cleared the bits from 0 to low-1.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37331 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/IntrinsicLowering.cpp')
-rw-r--r-- | lib/CodeGen/IntrinsicLowering.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp index b870545008..c2e4024d11 100644 --- a/lib/CodeGen/IntrinsicLowering.cpp +++ b/lib/CodeGen/IntrinsicLowering.cpp @@ -557,11 +557,13 @@ static Instruction *LowerPartSet(CallInst *CI) { Rplcmnt->addIncoming(NewRes, reverse); Rplcmnt->addIncoming(Rep4, small); Value* t0 = CastInst::createIntegerCast(NumBits,ValTy,false,"",result); - Value* t1 = BinaryOperator::createShl(ValMask, t0, "", result); - Value* t2 = BinaryOperator::createShl(t1, Lo, "", result); - Value* t3 = BinaryOperator::createAnd(t2, Val, "", result); - Value* t4 = BinaryOperator::createShl(Rplcmnt, Lo, "", result); - Value* Rslt = BinaryOperator::createOr(t3, t4, "part_set", result); + Value* t1 = BinaryOperator::createShl(ValMask, Lo, "", result); + Value* t2 = BinaryOperator::createNot(t1, "", result); + Value* t3 = BinaryOperator::createShl(t1, t0, "", result); + Value* t4 = BinaryOperator::createOr(t2, t3, "", result); + Value* t5 = BinaryOperator::createAnd(t4, Val, "", result); + Value* t6 = BinaryOperator::createShl(Rplcmnt, Lo, "", result); + Value* Rslt = BinaryOperator::createOr(t5, t6, "part_set", result); new ReturnInst(Rslt, result); } |