Skip to content
  1. Dec 02, 2010
    • Chris Lattner's avatar
      Improve codegen for initializer lists to use memset more aggressively · 27a3631b
      Chris Lattner authored
      when an initializer is variable (I handled the constant case in a previous
      patch).  This has three pieces:
      
      1. Enhance AggValueSlot to have a 'isZeroed' bit to tell CGExprAgg that
         the memory being stored into has previously been memset to zero.
      2. Teach CGExprAgg to not emit stores of zero to isZeroed memory.
      3. Teach CodeGenFunction::EmitAggExpr to scan initializers to determine
         whether they are profitable to emit a memset + inividual stores vs
         stores for everything.
      
      The heuristic used is that a global has to be more than 16 bytes and
      has to be 3/4 zero to be candidate for this xform.  The two testcases
      are illustrative of the scenarios this catches.  We now codegen test9 into:
      
       call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 400, i32 4, i1 false)
       %.array = getelementptr inbounds [100 x i32]* %Arr, i32 0, i32 0
       %tmp = load i32* %X.addr, align 4
       store i32 %tmp, i32* %.array
      
      and test10 into:
      
        call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 392, i32 8, i1 false)
        %tmp = getelementptr inbounds %struct.b* %S, i32 0, i32 0
        %tmp1 = getelementptr inbounds %struct.a* %tmp, i32 0, i32 0
        %tmp2 = load i32* %X.addr, align 4
        store i32 %tmp2, i32* %tmp1, align 4
        %tmp5 = getelementptr inbounds %struct.b* %S, i32 0, i32 3
        %tmp10 = getelementptr inbounds %struct.a* %tmp5, i32 0, i32 4
        %tmp11 = load i32* %X.addr, align 4
        store i32 %tmp11, i32* %tmp10, align 4
      
      Previously we produced 99 stores of zero for test9 and also tons for test10.
      This xforms should substantially speed up -O0 builds when it kicks in as well
      as reducing code size and optimizer heartburn on insane cases.  This resolves
      PR279.
      
      llvm-svn: 120692
      27a3631b
    • Chris Lattner's avatar
      attempt to fix a buildbot failure, apparently apache fails to build. · 4fc8fb09
      Chris Lattner authored
      llvm-svn: 120688
      4fc8fb09
    • Eric Christopher's avatar
      Add support for the common and nocommon attributes. · 8a2ee390
      Eric Christopher authored
      rdar://8560647
      
      llvm-svn: 120650
      8a2ee390
    • John McCall's avatar
      Perform lvalue-to-rvalue at the end of an expression statement in C. · fee942d1
      John McCall authored
      llvm-svn: 120646
      fee942d1
    • Chris Lattner's avatar
      Enhance the init generation logic to emit a memset followed by a few stores when · e6af8862
      Chris Lattner authored
      a global is larger than 32 bytes and has fewer than 6 non-zero values in the
      initializer.  Previously we'd turn something like this:
      
      char test8(int X) {
        char str[10000] = "abc";
      
      into a 10K global variable which we then memcpy'd from.  Now we generate:
      
        %str = alloca [10000 x i8], align 16
        %tmp = getelementptr inbounds [10000 x i8]* %str, i64 0, i64 0
        call void @llvm.memset.p0i8.i64(i8* %tmp, i8 0, i64 10000, i32 16, i1 false)
        store i8 97, i8* %tmp, align 16
        %0 = getelementptr [10000 x i8]* %str, i64 0, i64 1
        store i8 98, i8* %0, align 1
        %1 = getelementptr [10000 x i8]* %str, i64 0, i64 2
        store i8 99, i8* %1, align 2
      
      Which is much smaller in space and also likely faster.
      
      This is part of PR279
      
      llvm-svn: 120645
      e6af8862
    • John McCall's avatar
      Simplify the ASTs by consolidating ObjCImplicitGetterSetterExpr and ObjCPropertyRefExpr · b7bd14fa
      John McCall authored
      into the latter.
      
      llvm-svn: 120643
      b7bd14fa
    • Bob Wilson's avatar
      Swap order of checking for compatible vector types. · 01856f38
      Bob Wilson authored
      Check for compatible gcc, Altivec and Neon vectors before handling the
      lax-vector-conversions case.  Otherwise there is no way to avoid the
      warnings from -Wvector-conversions.
      
      llvm-svn: 120633
      01856f38
    • Douglas Gregor's avatar
      Eliminate two uses of NDEBUG in headers that cause different symbols · 4b00d3b5
      Douglas Gregor authored
      to be available in debug vs. release builds.
      
      llvm-svn: 120629
      4b00d3b5
    • Douglas Gregor's avatar
    • Douglas Gregor's avatar
      Extend ExternalASTSource with the ability to lazily complete the · 73693023
      Douglas Gregor authored
      definition of an Objective-C class. Unlike with C/C++ classes, we
      don't have a well-defined point in Sema where Objective-C classes are
      checked for completeness, nor do we need to involve Sema when
      completing a class. Therefore, we take the appropriate of having the
      external AST source mark a particular Objective-C class as having an
      external declaration; when using one of the accessors of an
      Objective-C class that has an external declaration, we request that
      the external AST source fill in the Objective-C class definition.
      
      llvm-svn: 120627
      73693023
  2. Dec 01, 2010
  3. Nov 30, 2010
Loading