Skip to content
  • Chris Lattner's avatar
    enhance the "change or icmp's into switch" xform to handle one value in an · a442f24a
    Chris Lattner authored
    '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.
    
    llvm-svn: 121680
    a442f24a
Loading