[llvm-commits] [llvm] r85814 - /llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
Victor Hernandez
vhernandez at apple.com
Tue Nov 3 12:16:37 PST 2009
Fixed these in r85933.
Victor
On Nov 2, 2009, at 8:29 PM, Chris Lattner wrote:
> On Nov 2, 2009, at 10:51 AM, Victor Hernandez wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=85814&view=rev
>> Log:
>> Set bit instead of calling pow() to compute 2 << n
>
> Thanks Victor,
>
>> +++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Mon Nov 2 12:51:28
>> 2009
>> @@ -16,6 +16,7 @@
>> #include "llvm/Constants.h"
>> #include "llvm/Instructions.h"
>> #include "llvm/Module.h"
>> +#include "llvm/ADT/APInt.h"
>
> You don't need this #include, please remove it.
>
>> @@ -156,15 +157,22 @@
>> return Op1;
>> }
>> if (Opcode == Instruction::Shl) {
>> - ConstantInt* Op1Int = dyn_cast<ConstantInt>(Op1);
>> - if (!Op1Int) return NULL;
>> - Value* Op1Pow = ConstantInt::get(Op1->getType(), (uint64_t)
>> - pow(2.0, (double) Op1Int-
>> >getZExtValue()));
>> + ConstantInt* Op1CI = dyn_cast<ConstantInt>(Op1);
>> + if (!Op1CI) return NULL;
>> +
>> + APInt Op1Int = Op1CI->getValue();
>> + unsigned Op1Width = Op1Int.getBitWidth();
>> + // check for overflow
>> + if (Op1Int.getActiveBits() > 64 || Op1Int.getZExtValue() >
>> Op1Width)
>> + return NULL;
>
> If the shift overflows, the original code is undefined. Please just
> use the APInt::getLimitedValue method (with the bitwidth as the
> argument) to handle this. You'll end up with much more elegant code.
>
> Finally, please use:
>
> ConstantInt *Op1CI
> instead of:
> ConstantInt* Op1CI
>
> With Op1CI and many other variables in this file.
>
> Thanks,
>
> -Chris
>
>
>
>> + Value* Op1Pow = ConstantInt::get(Context,
>> + APInt(Op1Width, 0).set
>> (Op1Int.getZExtValue()));
>> +
>> if (Op0 == ElementSize || (FoldedElementSize && Op0 ==
>> FoldedElementSize))
>> // ArraySize << log2(ElementSize)
>> return Op1Pow;
>> if (Op1Pow == ElementSize ||
>> - (FoldedElementSize && Op1Pow == FoldedElementSize))
>> + (FoldedElementSize && Op1Pow == FoldedElementSize))
>> // ElementSize << log2(ArraySize)
>> return Op0;
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20091103/20d4b82b/attachment.html>
More information about the llvm-commits
mailing list