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

Stepan Dyatkovskiy stpworld at narod.ru
Wed Sep 28 00:03:24 PDT 2011


> 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)?

> 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");>
> The rest of the changes look fine.
>
> -Eli




More information about the llvm-commits mailing list