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

Eli Friedman eli.friedman at gmail.com
Wed Sep 28 00:25:42 PDT 2011


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




More information about the llvm-commits mailing list