Hi Eric. What the names of borken tests? -Stepan
01.02.2012, 12:35, "Eric Christopher" <[email protected]>: > Nevermind, multiple repositories :) > > -eric > > On Feb 1, 2012, at 12:34 AM, Eric Christopher wrote: > >> This broke the clang testers also btw :) >> >> -eric >> >> On Jan 31, 2012, at 11:50 PM, Stepan Dyatkovskiy wrote: >>> Author: dyatkovskiy >>> Date: Wed Feb 1 01:50:21 2012 >>> New Revision: 149482 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=149482&view=rev >>> Log: >>> Compatability fix for SwitchInst refactoring. >>> >>> The purpose of refactoring is to hide operand roles from SwitchInst user >>> (programmer). If you want to play with operands directly, probably you will >>> need lower level methods than SwitchInst ones (TerminatorInst or may be >>> User). After this patch we can reorganize SwitchInst operands and >>> successors as we want. >>> >>> What was done: >>> >>> 1. Changed semantics of index inside the getCaseValue method: >>> getCaseValue(0) means "get first case", not a condition. Use >>> getCondition() if you want to resolve the condition. I propose don't mix >>> SwitchInst case indexing with low level indexing (TI successors indexing, >>> User's operands indexing), since it may be dangerous. >>> 2. By the same reason findCaseValue(ConstantInt*) returns actual number of >>> case value. 0 means first case, not default. If there is no case with given >>> value, ErrorIndex will returned. >>> 3. Added getCaseSuccessor method. I propose to avoid usage of >>> TerminatorInst::getSuccessor if you want to resolve case successor BB. Use >>> getCaseSuccessor instead, since internal SwitchInst organization of >>> operands/successors is hidden and may be changed in any moment. >>> 4. Added resolveSuccessorIndex and resolveCaseIndex. The main purpose of >>> these methods is to see how case successors are really mapped in >>> TerminatorInst. >>> 4.1 "resolveSuccessorIndex" was created if you need to level down from >>> SwitchInst to TerminatorInst. It returns TerminatorInst's successor index >>> for given case successor. >>> 4.2 "resolveCaseIndex" converts low level successors index to case index >>> that curresponds to the given successor. >>> >>> Note: There are also related compatability fix patches for dragonegg, >>> klee, llvm-gcc-4.0, llvm-gcc-4.2, safecode, clang. >>> >>> Modified: >>> cfe/trunk/lib/CodeGen/CGCleanup.cpp >>> cfe/trunk/lib/CodeGen/CGStmt.cpp >>> >>> Modified: cfe/trunk/lib/CodeGen/CGCleanup.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCleanup.cpp?rev=149482&r1=149481&r2=149482&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/CodeGen/CGCleanup.cpp (original) >>> +++ cfe/trunk/lib/CodeGen/CGCleanup.cpp Wed Feb 1 01:50:21 2012 >>> @@ -502,9 +502,9 @@ >>> >>> // The only uses should be fixup switches. >>> llvm::SwitchInst *si = cast<llvm::SwitchInst>(use.getUser()); >>> - if (si->getNumCases() == 2 && si->getDefaultDest() == unreachableBB) { >>> + if (si->getNumCases() == 1 && si->getDefaultDest() == unreachableBB) { >>> // Replace the switch with a branch. >>> - llvm::BranchInst::Create(si->getSuccessor(1), si); >>> + llvm::BranchInst::Create(si->getCaseSuccessor(0), si); >>> >>> // The switch operand is a load from the cleanup-dest alloca. >>> llvm::LoadInst *condition = cast<llvm::LoadInst>(si->getCondition()); >>> >>> Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=149482&r1=149481&r2=149482&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original) >>> +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Wed Feb 1 01:50:21 2012 >>> @@ -1221,7 +1221,7 @@ >>> >>> // Update the default block in case explicit case range tests have >>> // been chained on top. >>> - SwitchInsn->setSuccessor(0, CaseRangeBlock); >>> + SwitchInsn->setDefaultDest(CaseRangeBlock); >>> >>> // If a default was never emitted: >>> if (!DefaultBlock->getParent()) { >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
