implement aliases for div/idiv that have an explicit A register operand,
authorChris Lattner <sabre@nondot.org>
Sat, 6 Nov 2010 22:41:18 +0000 (22:41 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 6 Nov 2010 22:41:18 +0000 (22:41 +0000)
implementing rdar://8431864

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118364 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.td
test/MC/X86/x86-64.s

index bd0e86f94127752b04bd8ef4c81cd638ae1ed10d..148264d4dcd34c6c9c53a2be174fae325fdca3cf 100644 (file)
@@ -1377,6 +1377,26 @@ def : InstAlias<"clrw $reg", (XOR16rr GR16:$reg, GR16:$reg)>;
 def : InstAlias<"clrl $reg", (XOR32rr GR32:$reg, GR32:$reg)>;
 def : InstAlias<"clrq $reg", (XOR64rr GR64:$reg, GR64:$reg)>;
 
+// div and idiv aliases for explicit A register.
+def : InstAlias<"divb $src, %al",  (DIV8r  GR8 :$src)>;
+def : InstAlias<"divw $src, %ax",  (DIV16r GR16:$src)>;
+def : InstAlias<"divl $src, %eax", (DIV32r GR32:$src)>;
+def : InstAlias<"divq $src, %rax", (DIV64r GR64:$src)>;
+def : InstAlias<"divb $src, %al",  (DIV8m  i8mem :$src)>;
+def : InstAlias<"divw $src, %ax",  (DIV16m i16mem:$src)>;
+def : InstAlias<"divl $src, %eax", (DIV32m i32mem:$src)>;
+def : InstAlias<"divq $src, %rax", (DIV64m i64mem:$src)>;
+def : InstAlias<"idivb $src, %al",  (IDIV8r  GR8 :$src)>;
+def : InstAlias<"idivw $src, %ax",  (IDIV16r GR16:$src)>;
+def : InstAlias<"idivl $src, %eax", (IDIV32r GR32:$src)>;
+def : InstAlias<"idivq $src, %rax", (IDIV64r GR64:$src)>;
+def : InstAlias<"idivb $src, %al",  (IDIV8m  i8mem :$src)>;
+def : InstAlias<"idivw $src, %ax",  (IDIV16m i16mem:$src)>;
+def : InstAlias<"idivl $src, %eax", (IDIV32m i32mem:$src)>;
+def : InstAlias<"idivq $src, %rax", (IDIV64m i64mem:$src)>;
+
+
+
 // Various unary fpstack operations default to operating on on ST1.
 // For example, "fxch" -> "fxch %st(1)"
 def : InstAlias<"faddp",        (ADD_FPrST0  ST1)>;
index 6a24e3921993a2832d5f1fd3275f210755d8eb70..93e90669c81e6b1a5be94bc413f632e76080c517 100644 (file)
@@ -880,3 +880,20 @@ mov (%rsi), %gs  // CHECK: movl    (%rsi), %gs # encoding: [0x8e,0x2e]
 mov %gs, (%rsi)  // CHECK: movl        %gs, (%rsi) # encoding: [0x8c,0x2e]
 
 
+// rdar://8431864
+       div     %bl,%al
+       div     %bx,%ax
+       div     %ecx,%eax
+       div     0xdeadbeef(%ebx,%ecx,8),%eax
+       div     0x45,%eax
+       div     0x7eed,%eax
+       div     0xbabecafe,%eax
+       div     0x12345678,%eax
+       idiv    %bl,%al
+       idiv    %bx,%ax
+       idiv    %ecx,%eax
+       idiv    0xdeadbeef(%ebx,%ecx,8),%eax
+       idiv    0x45,%eax
+       idiv    0x7eed,%eax
+       idiv    0xbabecafe,%eax
+       idiv    0x12345678,%eax