[llvm-commits] [LLVM, Switch case ranges] Cleanup patch before working on switch case ranges

Stepan Dyatkovskiy stpworld at narod.ru
Wed Sep 28 01:22:02 PDT 2011


Hi,
Please find the fixed patch.

Regards,
Stepan.

Eli Friedman wrote:
> On Wed, Sep 28, 2011 at 12:03 AM, Stepan Dyatkovskiy<stpworld at narod.ru>  wrote:
>>> On Tue, Sep 27, 2011 at 11:32 AM, Stepan Dyatkovskiy<stpworld at narod.ru>
>>>   wrote:
>>>>
>>>> Hi,
>>>>
>>>> Please find attached the clean-up patch for the SwitchInst internals
>>>> before
>>>> working on switch case ranges
>>>> (http://llvm.org/bugs/show_bug.cgi?id=1255).
>>>> Patches for switch case ranges will follow.
>>>
>>> I'm not sure about the changes to
>>> lib/Target/CppBackend/CPPBackend.cpp... it looks like it ends up doing
>>> extra work.
>>
>> void CppWriter::printInstruction has mixed implementation inside. For some
>> instructions opNames array is used:
>>
>>     const BranchInst* br = cast<BranchInst>(I);
>>     Out<<  "BranchInst::Create(" ;
>>     if (br->getNumOperands() == 3) {
>>       Out<<  opNames[2]<<  ","
>>           <<  opNames[1]<<  ","
>>           <<  opNames[0]<<  ", ";
>>
>>     } else if (br->getNumOperands() == 1) {
>>       Out<<  opNames[0]<<  ", ";
>>     } else {
>>       error("Branch with 2 operands?");
>>     }
>>
>> But there are also instructions for which its own interface is used:
>>   const InvokeInst* inv = cast<InvokeInst>(I);
>>   // ...
>>   // some code here
>>   // ...
>>   Out<<  "InvokeInst *"<<  iName<<  " = InvokeInst::Create("
>>         <<  getOpName(inv->getCalledFunction())<<  ","
>>         <<  getOpName(inv->getNormalDest())<<  ","
>>         <<  getOpName(inv->getUnwindDest())<<  ","
>>         <<  iName<<  "_params, \"";
>>
>> SwitchInst has unclear usage of operands array. Each even operand is a Case
>> Value and it has ConstantInt type. And each odd operand is a case
>> destination and it has BasicBlock type. So probably it is better to use
>> SwitchInst interface here (like for InvokeInst)?
>
> Okay; this isn't really performance-sensitive code.
>
>>> Probably not a big deal, though.
>>>
>>> +        for (unsigned i = 1; i<    NumCases; ++i) {
>>> +          ConstantInt* CaseVal = SI.getCaseValue(i);
>>> +          Constant* NewCaseVal =
>>> ConstantExpr::getSub(cast<Constant>(CaseVal),
>>> +              AddRHS);
>>> +          assert(isa<ConstantInt>(NewCaseVal)&&
>>> +              "Result of expression should be constant");
>>>
>>> Slightly strange indentation here.
>>
>> Did you mean something like this?
>>
>> +        for (unsigned i = 1; i<    NumCases; ++i) {
>> +          ConstantInt* CaseVal = SI.getCaseValue(i);
>> +          Constant* NewCaseVal =
>> ConstantExpr::getSub(cast<Constant>(CaseVal),
>> +                                                      AddRHS);
>> +          assert(isa<ConstantInt>(NewCaseVal)&&
>> +                 "Result of expression should be constant");>
>
> Yes.
>
> -Eli

-------------- next part --------------
A non-text attachment was scrubbed...
Name: cr-cleanup.patch
Type: text/x-patch
Size: 9471 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20110928/d22ab417/attachment.bin>


More information about the llvm-commits mailing list