[llvm] r187020 - Fix aliases for shrd/shld to handle Intel syntax properly. Also suppress them from being used by the asm printer.

Chandler Carruth chandlerc at google.com
Tue Jul 23 22:06:29 PDT 2013


On Tue, Jul 23, 2013 at 9:38 PM, Craig Topper <craig.topper at gmail.com>wrote:

> Author: ctopper
> Date: Tue Jul 23 23:38:13 2013
> New Revision: 187020
>
> URL: http://llvm.org/viewvc/llvm-project?rev=187020&view=rev
> Log:
> Fix aliases for shrd/shld to handle Intel syntax properly. Also suppress
> them from being used by the asm printer.
>

Ahem. As with many of these changes, please add test cases. =D


>
> Modified:
>     llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp
>     llvm/trunk/lib/Target/X86/X86InstrInfo.td
>
> Modified: llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=187020&r1=187019&r2=187020&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp (original)
> +++ llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp Tue Jul 23 23:38:13
> 2013
> @@ -1832,7 +1832,7 @@ void CppWriter::printInline(const std::s
>    unsigned arg_count = 1;
>    for (Function::const_arg_iterator AI = F->arg_begin(), AE =
> F->arg_end();
>         AI != AE; ++AI) {
> -    Out << ", Value* arg_" << arg_count;
> +    Out << ", Value* arg_" << arg_count++;
>    }
>    Out << ") {";
>    nl(Out);
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=187020&r1=187019&r2=187020&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jul 23 23:38:13 2013
> @@ -2162,19 +2162,19 @@ def : InstAlias<"outl\t$port", (OUT32ir
>  def : InstAlias<"sldt $mem", (SLDT16m i16mem:$mem)>;
>
>  // shld/shrd op,op -> shld op, op, CL
> -def : InstAlias<"shldw $r2, $r1", (SHLD16rrCL GR16:$r1, GR16:$r2)>;
> -def : InstAlias<"shldl $r2, $r1", (SHLD32rrCL GR32:$r1, GR32:$r2)>;
> -def : InstAlias<"shldq $r2, $r1", (SHLD64rrCL GR64:$r1, GR64:$r2)>;
> -def : InstAlias<"shrdw $r2, $r1", (SHRD16rrCL GR16:$r1, GR16:$r2)>;
> -def : InstAlias<"shrdl $r2, $r1", (SHRD32rrCL GR32:$r1, GR32:$r2)>;
> -def : InstAlias<"shrdq $r2, $r1", (SHRD64rrCL GR64:$r1, GR64:$r2)>;
> +def : InstAlias<"shld{w}\t{$r2, $r1|$r1, $r2}", (SHLD16rrCL GR16:$r1,
> GR16:$r2), 0>;
> +def : InstAlias<"shld{l}\t{$r2, $r1|$r1, $r2}", (SHLD32rrCL GR32:$r1,
> GR32:$r2), 0>;
> +def : InstAlias<"shld{q}\t{$r2, $r1|$r1, $r2}", (SHLD64rrCL GR64:$r1,
> GR64:$r2), 0>;
> +def : InstAlias<"shrd{w}\t{$r2, $r1|$r1, $r2}", (SHRD16rrCL GR16:$r1,
> GR16:$r2), 0>;
> +def : InstAlias<"shrd{l}\t{$r2, $r1|$r1, $r2}", (SHRD32rrCL GR32:$r1,
> GR32:$r2), 0>;
> +def : InstAlias<"shrd{q}\t{$r2, $r1|$r1, $r2}", (SHRD64rrCL GR64:$r1,
> GR64:$r2), 0>;
>
> -def : InstAlias<"shldw $reg, $mem", (SHLD16mrCL i16mem:$mem, GR16:$reg)>;
> -def : InstAlias<"shldl $reg, $mem", (SHLD32mrCL i32mem:$mem, GR32:$reg)>;
> -def : InstAlias<"shldq $reg, $mem", (SHLD64mrCL i64mem:$mem, GR64:$reg)>;
> -def : InstAlias<"shrdw $reg, $mem", (SHRD16mrCL i16mem:$mem, GR16:$reg)>;
> -def : InstAlias<"shrdl $reg, $mem", (SHRD32mrCL i32mem:$mem, GR32:$reg)>;
> -def : InstAlias<"shrdq $reg, $mem", (SHRD64mrCL i64mem:$mem, GR64:$reg)>;
> +def : InstAlias<"shld{w}\t{$reg, $mem|$mem, $reg}", (SHLD16mrCL
> i16mem:$mem, GR16:$reg), 0>;
> +def : InstAlias<"shld{l}\t{$reg, $mem|$mem, $reg}", (SHLD32mrCL
> i32mem:$mem, GR32:$reg), 0>;
> +def : InstAlias<"shld{q}\t{$reg, $mem|$mem, $reg}", (SHLD64mrCL
> i64mem:$mem, GR64:$reg), 0>;
> +def : InstAlias<"shrd{w}\t{$reg, $mem|$mem, $reg}", (SHRD16mrCL
> i16mem:$mem, GR16:$reg), 0>;
> +def : InstAlias<"shrd{l}\t{$reg, $mem|$mem, $reg}", (SHRD32mrCL
> i32mem:$mem, GR32:$reg), 0>;
> +def : InstAlias<"shrd{q}\t{$reg, $mem|$mem, $reg}", (SHRD64mrCL
> i64mem:$mem, GR64:$reg), 0>;
>
>  /*  FIXME: This is disabled because the asm matcher is currently
> incapable of
>   *  matching a fixed immediate like $1.
>
>
> _______________________________________________
> 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/20130723/897e265c/attachment.html>


More information about the llvm-commits mailing list