[llvm-commits] [llvm] r147720 - in /llvm/trunk: lib/Target/ARM/ARMFastISel.cpp test/CodeGen/ARM/fast-isel-intrinsic.ll test/CodeGen/ARM/fast-isel.ll

Chad Rosier mcrosier at apple.com
Sun Jan 8 14:00:53 PST 2012


On Jan 6, 2012, at 8:07 PM, Jakob Stoklund Olesen wrote:

> Author: stoklund
> Date: Fri Jan  6 22:07:22 2012
> New Revision: 147720
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=147720&view=rev
> Log:
> Use getRegForValue() to materialize the address of ARM globals.
> 
> This enables basic local CSE, giving us 20% smaller code for
> consumer-typeset in -O0 builds.

Nice catch!

 Chad

> <rdar://problem/10658692>
> 
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
>    llvm/trunk/test/CodeGen/ARM/fast-isel-intrinsic.ll
>    llvm/trunk/test/CodeGen/ARM/fast-isel.ll
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=147720&r1=147719&r2=147720&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Fri Jan  6 22:07:22 2012
> @@ -865,16 +865,6 @@
>     }
>   }
> 
> -  // Materialize the global variable's address into a reg which can
> -  // then be used later to load the variable.
> -  if (const GlobalValue *GV = dyn_cast<GlobalValue>(Obj)) {
> -    unsigned Tmp = ARMMaterializeGV(GV, TLI.getValueType(Obj->getType()));
> -    if (Tmp == 0) return false;
> -
> -    Addr.Base.Reg = Tmp;
> -    return true;
> -  }
> -
>   // Try to get this in a register if nothing else has worked.
>   if (Addr.Base.Reg == 0) Addr.Base.Reg = getRegForValue(Obj);
>   return Addr.Base.Reg != 0;
> 
> Modified: llvm/trunk/test/CodeGen/ARM/fast-isel-intrinsic.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/fast-isel-intrinsic.ll?rev=147720&r1=147719&r2=147720&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/fast-isel-intrinsic.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/fast-isel-intrinsic.ll Fri Jan  6 22:07:22 2012
> @@ -86,27 +86,21 @@
> ; ARM: movw r0, :lower16:L_temp$non_lazy_ptr
> ; ARM: movt r0, :upper16:L_temp$non_lazy_ptr
> ; ARM: ldr r0, [r0]
> -; ARM: movw r1, :lower16:L_temp$non_lazy_ptr
> -; ARM: movt r1, :upper16:L_temp$non_lazy_ptr
> -; ARM: ldr r1, [r1]
> -; ARM: ldr r2, [r1, #16]
> -; ARM: str r2, [r0, #4]
> -; ARM: ldr r2, [r1, #20]
> -; ARM: str r2, [r0, #8]
> -; ARM: ldrh r1, [r1, #24]
> +; ARM: ldr r1, [r0, #16]
> +; ARM: str r1, [r0, #4]
> +; ARM: ldr r1, [r0, #20]
> +; ARM: str r1, [r0, #8]
> +; ARM: ldrh r1, [r0, #24]
> ; ARM: strh r1, [r0, #12]
> ; ARM: bx lr
> ; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr
> ; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr
> ; THUMB: ldr r0, [r0]
> -; THUMB: movw r1, :lower16:L_temp$non_lazy_ptr
> -; THUMB: movt r1, :upper16:L_temp$non_lazy_ptr
> -; THUMB: ldr r1, [r1]
> -; THUMB: ldr r2, [r1, #16]
> -; THUMB: str r2, [r0, #4]
> -; THUMB: ldr r2, [r1, #20]
> -; THUMB: str r2, [r0, #8]
> -; THUMB: ldrh r1, [r1, #24]
> +; THUMB: ldr r1, [r0, #16]
> +; THUMB: str r1, [r0, #4]
> +; THUMB: ldr r1, [r0, #20]
> +; THUMB: str r1, [r0, #8]
> +; THUMB: ldrh r1, [r0, #24]
> ; THUMB: strh r1, [r0, #12]
> ; THUMB: bx lr
>   call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false)
> 
> Modified: llvm/trunk/test/CodeGen/ARM/fast-isel.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/fast-isel.ll?rev=147720&r1=147719&r2=147720&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/fast-isel.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/fast-isel.ll Fri Jan  6 22:07:22 2012
> @@ -145,22 +145,16 @@
> ; THUMB: movw r0, :lower16:L_test4g$non_lazy_ptr
> ; THUMB: movt r0, :upper16:L_test4g$non_lazy_ptr
> ; THUMB: ldr r0, [r0]
> -; THUMB: ldr r0, [r0]
> -; THUMB: adds r0, #1
> -; THUMB: movw r1, :lower16:L_test4g$non_lazy_ptr
> -; THUMB: movt r1, :upper16:L_test4g$non_lazy_ptr
> -; THUMB: ldr r1, [r1]
> -; THUMB: str r0, [r1]
> +; THUMB: ldr r1, [r0]
> +; THUMB: adds r1, #1
> +; THUMB: str r1, [r0]
> 
> ; ARM: movw r0, :lower16:L_test4g$non_lazy_ptr
> ; ARM: movt r0, :upper16:L_test4g$non_lazy_ptr
> ; ARM: ldr r0, [r0]
> -; ARM: ldr r0, [r0]
> -; ARM: add r0, r0, #1
> -; ARM: movw r1, :lower16:L_test4g$non_lazy_ptr
> -; ARM: movt r1, :upper16:L_test4g$non_lazy_ptr
> -; ARM: ldr r1, [r1]
> -; ARM: str r0, [r1]
> +; ARM: ldr r1, [r0]
> +; ARM: add r1, r1, #1
> +; ARM: str r1, [r0]
> }
> 
> ; Check unaligned stores
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list