[llvm] r233653 - [AArch64] Fix poor codegen for add immediate.

Eric Christopher echristo at gmail.com
Thu Apr 2 11:18:10 PDT 2015


Put a comment up there by the AddedComplexity?

-eric

On Mon, Mar 30, 2015 at 5:39 PM Quentin Colombet <qcolombet at apple.com>
wrote:

> Author: qcolombet
> Date: Mon Mar 30 19:31:13 2015
> New Revision: 233653
>
> URL: http://llvm.org/viewvc/llvm-project?rev=233653&view=rev
> Log:
> [AArch64] Fix poor codegen for add immediate.
> We used to match the register variant before the immediate when the
> register
> argument could be implicitly zero-extended.
>
> Modified:
>     llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td
>     llvm/trunk/test/CodeGen/AArch64/addsub.ll
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
> AArch64/AArch64InstrFormats.td?rev=233653&r1=233652&r2=233653&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td Mon Mar 30
> 19:31:13 2015
> @@ -1637,10 +1637,12 @@ multiclass AddSub<bit isSub, string mnem
>                    SDPatternOperator OpNode = null_frag> {
>    let hasSideEffects = 0, isReMaterializable = 1, isAsCheapAsAMove = 1 in
> {
>    // Add/Subtract immediate
> +  let AddedComplexity = 6 in
>    def Wri  : BaseAddSubImm<isSub, 0, GPR32sp, GPR32sp,
> addsub_shifted_imm32,
>                             mnemonic, OpNode> {
>      let Inst{31} = 0;
>    }
> +  let AddedComplexity = 6 in
>    def Xri  : BaseAddSubImm<isSub, 0, GPR64sp, GPR64sp,
> addsub_shifted_imm64,
>                             mnemonic, OpNode> {
>      let Inst{31} = 1;
>
> Modified: llvm/trunk/test/CodeGen/AArch64/addsub.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/AArch64/addsub.ll?rev=233653&r1=233652&r2=233653&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/AArch64/addsub.ll (original)
> +++ llvm/trunk/test/CodeGen/AArch64/addsub.ll Mon Mar 30 19:31:13 2015
> @@ -24,6 +24,34 @@ define void @add_small() {
>    ret void
>  }
>
> +; Make sure we grab the imm variant when the register operand
> +; can be implicitly zero-extend.
> +; We used to generate something horrible like this:
> +; wA = ldrb
> +; xB = ldimm 12
> +; xC = add xB, wA, uxtb
> +; whereas this can be achieved with:
> +; wA = ldrb
> +; xC = add xA, #12 ; <- xA implicitly zero extend wA.
> +define void @add_small_imm(i8* %p, i64* %q, i32 %b, i32* %addr) {
> +; CHECK-LABEL: add_small_imm:
> +entry:
> +
> +; CHECK: ldrb w[[LOAD32:[0-9]+]], [x0]
> +  %t = load i8, i8* %p
> +  %promoted = zext i8 %t to i64
> +  %zextt = zext i8 %t to i32
> +  %add = add nuw i32 %zextt, %b
> +
> +; CHECK: add [[ADD2:x[0-9]+]], x[[LOAD32]], #12
> +  %add2 = add nuw i64 %promoted, 12
> +  store i32 %add, i32* %addr
> +
> +; CHECK: str [[ADD2]], [x1]
> +  store i64 %add2, i64* %q
> +  ret void
> +}
> +
>  ; Add 12-bit immediates, shifted left by 12 bits
>  define void @add_med() {
>  ; CHECK-LABEL: add_med:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150402/e9939e7a/attachment.html>


More information about the llvm-commits mailing list