Skip to content
  1. Jul 15, 2004
  2. Jul 13, 2004
    • Chris Lattner's avatar
      Factor some code to handle "load (constantexpr cast foo)" just like · 35e24774
      Chris Lattner authored
      "load (cast foo)".  This allows us to compile C++ code like this:
      
      class Bclass {
        public: virtual int operator()() { return 666; }
      };
      
      class Dclass: public Bclass {
        public: virtual int operator()() { return 667; }
      } ;
      
      int main(int argc, char** argv) {
        Dclass x;
        return x();
      }
      
      Into this:
      
      int %main(int %argc, sbyte** %argv) {
      entry:
              call void %__main( )
              ret int 667
      }
      
      Instead of this:
      
      int %main(int %argc, sbyte** %argv) {
      entry:
              %x = alloca "struct.std::bad_typeid"            ; <"struct.std::bad_typeid"*> [#uses=3]
              call void %__main( )
              %tmp.1.i.i = getelementptr "struct.std::bad_typeid"* %x, uint 0, uint 0, uint 0         ; <int (...)***> [#uses=1]
              store int (...)** getelementptr ([3 x int (...)*]*  %vtable for Bclass, int 0, long 2), int (...)*** %tmp.1.i.i
              %tmp.3.i = getelementptr "struct.std::bad_typeid"* %x, int 0, uint 0, uint 0            ; <int (...)***> [#uses=1]
              store int (...)** getelementptr ([3 x int (...)*]*  %vtable for Dclass, int 0, long 2), int (...)*** %tmp.3.i
              %tmp.5 = load int ("struct.std::bad_typeid"*)** cast (int (...)** getelementptr ([3 x int (...)*]*  %vtable for Dclass, int 0, long 2) to int
      ("struct.std::bad_typeid"*)**)          ; <int ("struct.std::bad_typeid"*)*> [#uses=1]
              %tmp.6 = call int %tmp.5( "struct.std::bad_typeid"* %x )                ; <int> [#uses=1]
      	ret int %tmp.6
              ret int 0
      }
      
      In order words, we now resolve the virtual function call.
      
      llvm-svn: 14783
      35e24774
  3. Jul 06, 2004
  4. Jul 04, 2004
  5. Jul 03, 2004
  6. Jul 02, 2004
  7. Jul 01, 2004
  8. Jun 28, 2004
  9. Jun 25, 2004
  10. Jun 24, 2004
  11. Jun 20, 2004
  12. Jun 19, 2004
  13. Jun 18, 2004
  14. Jun 17, 2004
  15. Jun 10, 2004
    • Chris Lattner's avatar
      Fix a bug in my checkin from last night that caused miscompilations of · ee59d4bf
      Chris Lattner authored
      186.crafty, fhourstones and 132.ijpeg.
      
      Bugpoint makes really nasty miscompilations embarassingly easy to find.  It
      narrowed it down to the instcombiner and this testcase (from fhourstones):
      
      bool %l7153_l4706_htstat_loopentry_2E_4_no_exit_2E_4(int* %i, [32 x int]* %works, int* %tmp.98.out) {
      newFuncRoot:
              %tmp.96 = load int* %i          ; <int> [#uses=1]
              %tmp.97 = getelementptr [32 x int]* %works, long 0, int %tmp.96         ; <int*> [#uses=1]
              %tmp.98 = load int* %tmp.97             ; <int> [#uses=2]
              %tmp.99 = load int* %i          ; <int> [#uses=1]
              %tmp.100 = and int %tmp.99, 7           ; <int> [#uses=1]
              %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=2]
              %tmp.102 = cast bool %tmp.101 to int            ; <int> [#uses=0]
              br bool %tmp.101, label %codeRepl4.exitStub, label %codeRepl3.exitStub
      
      codeRepl4.exitStub:             ; preds = %newFuncRoot
              store int %tmp.98, int* %tmp.98.out
              ret bool true
      
      codeRepl3.exitStub:             ; preds = %newFuncRoot
              store int %tmp.98, int* %tmp.98.out
              ret bool false
      }
      
      ... which only has one combination performed on it:
      
      $ llvm-as < t.ll | opt -instcombine -debug | llvm-dis
      IC: Old =       %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=1]
          New =       setne int %tmp.100, 0           ; <bool>:<badref> [#uses=0]
      IC: MOD =       br bool %tmp.101, label %codeRepl3.exitStub, label %codeRepl4.exitStub
      IC: MOD =       %tmp.97 = getelementptr [32 x int]* %works, uint 0, int %tmp.96         ; <int*> [#uses=1]
      
      It doesn't get much better than this.  :)
      
      llvm-svn: 14109
      ee59d4bf
    • Chris Lattner's avatar
      More minor cleanups · c8e7e298
      Chris Lattner authored
      llvm-svn: 14108
      c8e7e298
    • Chris Lattner's avatar
      Eliminate many occurrances of Instruction:: · df20a4d5
      Chris Lattner authored
      llvm-svn: 14107
      df20a4d5
  16. Jun 09, 2004
  17. May 28, 2004
  18. May 27, 2004
    • Chris Lattner's avatar
      Fix InstCombine/load.ll & PR347. · ed79d8af
      Chris Lattner authored
      This code hadn't been updated after the "structs with more than 256 elements"
      related changes to the GEP instruction.  Also it was not handling the
      ConstantAggregateZero class.
      
      Now it does!
      
      llvm-svn: 13834
      ed79d8af
  19. May 25, 2004
Loading