aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveStackAnalysis.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-12-13 04:50:38 +0000
committerChris Lattner <sabre@nondot.org>2010-12-13 04:50:38 +0000
commit7312a22ed63607e4ae7b0d9326e42358fd41e245 (patch)
tree5c596e06052b978ad7a6634d4b6a97d97901e3df /lib/CodeGen/LiveStackAnalysis.cpp
parentf5198e7fe32704b25fc9d8b041a1d81cde1696b6 (diff)
enhance the "change or icmp's into switch" xform to handle one value in an
'or sequence' that it doesn't understand. This allows us to optimize something insane like this: int crud (unsigned char c, unsigned x) { if(((((((((( (int) c <= 32 || (int) c == 46) || (int) c == 44) || (int) c == 58) || (int) c == 59) || (int) c == 60) || (int) c == 62) || (int) c == 34) || (int) c == 92) || (int) c == 39) != 0) foo(); } into: define i32 @crud(i8 zeroext %c, i32 %x) nounwind ssp noredzone { entry: %cmp = icmp ult i8 %c, 33 br i1 %cmp, label %if.then, label %switch.early.test switch.early.test: ; preds = %entry switch i8 %c, label %if.end [ i8 39, label %if.then i8 44, label %if.then i8 58, label %if.then i8 59, label %if.then i8 60, label %if.then i8 62, label %if.then i8 46, label %if.then i8 92, label %if.then i8 34, label %if.then ] by pulling the < comparison out ahead of the newly formed switch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121680 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveStackAnalysis.cpp')
0 files changed, 0 insertions, 0 deletions