Skip to content
  1. Jan 05, 2010
  2. Jan 04, 2010
  3. Jan 03, 2010
    • Chris Lattner's avatar
      pull my debug hooks out, I'm done with this xform for now. · 48218e42
      Chris Lattner authored
      llvm-svn: 92446
      48218e42
    • Nick Lewycky's avatar
      Small cleanups, refactor some duplicated code into a single method. No · 475d3d12
      Nick Lewycky authored
      functionality change.
      
      llvm-svn: 92445
      475d3d12
    • Chris Lattner's avatar
      generalize the previous transformation to handle indexing into · fca0c8f9
      Chris Lattner authored
      arrays of structs and other arrays, so long as all the subsequent
      indexes are constants.  This triggers frequently for stuff like:
      
      @divisions = internal constant [29 x [2 x i32]] [[2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 2], [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2]], align 32 ; <[29 x [2 x i32]]*> [#uses=50]
      
      	  %623 = getelementptr inbounds [29 x [2 x i32]]* @divisions, i64 0, i64 %619, i64 0 ; <i32*> [#uses=1]
      	   %684 = icmp eq i32 %683, 999 
      
      also for the "my_defs" table in 'gs', etc.
      
      llvm-svn: 92444
      fca0c8f9
    • Nick Lewycky's avatar
      Cleanup. · ff9cd7ac
      Nick Lewycky authored
      llvm-svn: 92436
      ff9cd7ac
  4. Jan 02, 2010
    • Chris Lattner's avatar
      teach instcombine to optimize idioms like A[i]&42 == 0. This · 98ad2b56
      Chris Lattner authored
      occurs in 403.gcc in mode_mask_array, in safe-ctype.c (which
      is copied in multiple apps) in _sch_istable, etc.
      
      llvm-svn: 92427
      98ad2b56
    • Chris Lattner's avatar
      Teach the table lookup optimization to generate range compares · b56bef45
      Chris Lattner authored
      when a consequtive sequence of elements all satisfies the 
      predicate.  Like the double compare case, this generates better
      code than the magic constant case and generalizes to more than
      32/64 element array lookups.
      
      Here are some examples where it triggers.  From 403.gcc, most
      accesses to the rtx_class array are handled, e.g.:
      
      @rtx_class = constant [153 x i8] c"xxxxxmmmmmmmmxxxxxxxxxxxxmxxxxxxiiixxxxxxxxxxxxxxxxxxxooxooooooxxoooooox3x2c21c2222ccc122222ccccaaaaaa<<<<<<<<<<<<<<<<<<111111111111bbooxxxxxxxxxxcc2211x", align 32 ; <[153 x i8]*> [#uses=547]
         %142 = icmp eq i8 %141, 105
      @rtx_class = constant [153 x i8] c"xxxxxmmmmmmmmxxxxxxxxxxxxmxxxxxxiiixxxxxxxxxxxxxxxxxxxooxooooooxxoooooox3x2c21c2222ccc122222ccccaaaaaa<<<<<<<<<<<<<<<<<<111111111111bbooxxxxxxxxxxcc2211x", align 32 ; <[153 x i8]*> [#uses=543]
      	   %165 = icmp eq i8 %164, 60      
      
      Also, most of the 59-element arrays (mode_class/rid_to_yy, etc) 
      optimized before are actually range compares.  This lets 32-bit
      machines optimize them.
      
      400.perlbmk has stuff like this:
      
      400.perlbmk: PL_regkind, even for 32-bit:
      @PL_regkind = constant [62 x i8] c"\00\00\02\02\02\06\06\06\06\09\09\0B\0B\0D\0E\0E\0E\11\12\12\14\14\16\16\18\18\1A\1A\1C\1C\1E\1F !!!$$&'((((,-.///88886789:;8$", align 32 ; <[62 x i8]*> [#uses=4]
      	   %811 = icmp ne i8 %810, 33 
      
      @PL_utf8skip = constant [256 x i8] c"\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\04\04\04\04\04\04\04\04\05\05\05\05\06\06\07\0D", align 32 ; <[256 x i8]*> [#uses=94]
      	   %12 = icmp ult i8 %10, 2
                 
      etc.
      
      llvm-svn: 92426
      b56bef45
Loading