[llvm] r317330 - Fix for Bug 34475 - LOCK/REP/REPNE prefixes emitted as instruction on their own.

Andrew V. Tischenko via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 3 08:25:14 PDT 2017


Author: avt77
Date: Fri Nov  3 08:25:13 2017
New Revision: 317330

URL: http://llvm.org/viewvc/llvm-project?rev=317330&view=rev
Log:
Fix for Bug 34475 - LOCK/REP/REPNE prefixes emitted as instruction on their own.
Differential Revision: https://reviews.llvm.org/D39546

Modified:
    llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
    llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
    llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll
    llvm/trunk/test/Instrumentation/AddressSanitizer/X86/asm_rep_movs.ll
    llvm/trunk/test/MC/Disassembler/X86/prefixes-i386.txt
    llvm/trunk/test/MC/Disassembler/X86/prefixes-x86_64.txt
    llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
    llvm/trunk/test/MC/Disassembler/X86/simple-tests.txt

Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp Fri Nov  3 08:25:13 2017
@@ -54,12 +54,12 @@ void X86ATTInstPrinter::printInst(const
   if (TSFlags & X86II::LOCK)
     OS << "\tlock\t";
   if (!(TSFlags & X86II::LOCK) && Flags & X86::IP_HAS_LOCK)
-    OS << "\tlock\n";
+    OS << "\tlock\t";
 
   if (Flags & X86::IP_HAS_REPEAT_NE)
-    OS << "\trepne\n";
+    OS << "\trepne\t";
   else if (Flags & X86::IP_HAS_REPEAT)
-    OS << "\trep\n";
+    OS << "\trep\t";
 
   // Output CALLpcrel32 as "callq" in 64-bit mode.
   // In Intel annotation it's always emitted as "call".

Modified: llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp Fri Nov  3 08:25:13 2017
@@ -41,13 +41,13 @@ void X86IntelInstPrinter::printInst(cons
   uint64_t TSFlags = Desc.TSFlags;
 
   if (TSFlags & X86II::LOCK)
-    OS << "\tlock\n";
+    OS << "\tlock\t";
 
   unsigned Flags = MI->getFlags();
   if (Flags & X86::IP_HAS_REPEAT_NE)
-    OS << "\trepne\n";
+    OS << "\trepne\t";
   else if (Flags & X86::IP_HAS_REPEAT)
-    OS << "\trep\n";
+    OS << "\trep\t";
 
   printInstruction(MI, OS);
 

Modified: llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll (original)
+++ llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll Fri Nov  3 08:25:13 2017
@@ -19,8 +19,7 @@ entry:
   %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.sroa.2.0.extract.trunc, 1
   ret { i64, i64 } %.fca.1.insert
 }
-; CHECK: lock
-; CHECK-NEXT: cmpxchg16b
+; CHECK: lock cmpxchg16b
 
 attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
 attributes #1 = { nounwind }

Modified: llvm/trunk/test/Instrumentation/AddressSanitizer/X86/asm_rep_movs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/X86/asm_rep_movs.ll?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/Instrumentation/AddressSanitizer/X86/asm_rep_movs.ll (original)
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/X86/asm_rep_movs.ll Fri Nov  3 08:25:13 2017
@@ -39,8 +39,7 @@ target triple = "x86_64-unknown-linux-gn
 ; CHECK: [[B]]:
 ; CHECK-NEXT: popfq
 
-; CHECK: rep
-; CHECK-NEXT: movsb (%rsi), %es:(%rdi)
+; CHECK: rep movsb (%rsi), %es:(%rdi)
 
 ; Function Attrs: nounwind sanitize_address uwtable
 define void @rep_movs_1b(i8* %dst, i8* %src, i64 %n) #0 {
@@ -73,8 +72,7 @@ entry:
 ; CHECK: [[Q]]:
 ; CHECK-NEXT: popfq
 
-; CHECK: rep
-; CHECK-NEXT: movsq (%rsi), %es:(%rdi)
+; CHECK: rep movsq (%rsi), %es:(%rdi)
 
 ; Function Attrs: nounwind sanitize_address uwtable
 define void @rep_movs_8b(i64* %dst, i64* %src, i64 %n) #0 {

Modified: llvm/trunk/test/MC/Disassembler/X86/prefixes-i386.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/X86/prefixes-i386.txt?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/X86/prefixes-i386.txt (original)
+++ llvm/trunk/test/MC/Disassembler/X86/prefixes-i386.txt Fri Nov  3 08:25:13 2017
@@ -3,85 +3,59 @@
 # CHECK:  movl    %fs:24, %eax
 0x64 0xa1 0x18 0x00 0x00 0x00 # mov eax, dword ptr fs:[18h]
 
-# CHECK: rep
-# CHECK-NEXT: insb    %dx, %es:(%edi)
+# CHECK: rep insb    %dx, %es:(%edi)
 0xf3 0x6c #rep ins
-# CHECK: rep
-# CHECK-NEXT: insl    %dx, %es:(%edi)
+# CHECK: rep insl    %dx, %es:(%edi)
 0xf3 0x6d #rep ins
-# CHECK: rep
-# CHECK-NEXT: movsb   (%esi), %es:(%edi)
+# CHECK: rep movsb   (%esi), %es:(%edi)
 0xf3 0xa4 #rep movs
-# CHECK: rep
-# CHECK-NEXT: movsl   (%esi), %es:(%edi)
+# CHECK: rep movsl   (%esi), %es:(%edi)
 0xf3 0xa5 #rep movs
-# CHECK: rep
-# CHECK-NEXT: outsb   (%esi), %dx
+# CHECK: rep outsb   (%esi), %dx
 0xf3 0x6e #rep outs
-# CHECK: rep
-# CHECK-NEXT: outsl   (%esi), %dx
+# CHECK: rep outsl   (%esi), %dx
 0xf3 0x6f #rep outs
-# CHECK: rep
-# CHECK-NEXT: lodsb   (%esi), %al
+# CHECK: rep lodsb   (%esi), %al
 0xf3 0xac #rep lods
-# CHECK: rep
-# CHECK-NEXT: lodsl   (%esi), %eax
+# CHECK: rep lodsl   (%esi), %eax
 0xf3 0xad #rep lods
-# CHECK: rep
-# CHECK-NEXT: stosb   %al, %es:(%edi)
+# CHECK: rep stosb   %al, %es:(%edi)
 0xf3 0xaa #rep stos
-# CHECK: rep
-# CHECK-NEXT: stosl   %eax, %es:(%edi)
+# CHECK: rep stosl   %eax, %es:(%edi)
 0xf3 0xab #rep stos
-# CHECK: rep
-# CHECK-NEXT: cmpsb   %es:(%edi), (%esi)
+# CHECK: rep cmpsb   %es:(%edi), (%esi)
 0xf3 0xa6 #rep cmps
-# CHECK: rep
-# CHECK-NEXT: cmpsl   %es:(%edi), (%esi)
+# CHECK: rep cmpsl   %es:(%edi), (%esi)
 0xf3 0xa7 #repe cmps
-# CHECK: rep
-# CHECK-NEXT: scasb   %es:(%edi), %al
+# CHECK: rep scasb   %es:(%edi), %al
 0xf3 0xae #repe scas
-# CHECK: rep
-# CHECK-NEXT: scasl   %es:(%edi), %eax
+# CHECK: rep scasl   %es:(%edi), %eax
 0xf3 0xaf #repe scas
-# CHECK: repne
-# CHECK-NEXT: cmpsb   %es:(%edi), (%esi)
+# CHECK: repne cmpsb   %es:(%edi), (%esi)
 0xf2 0xa6 #repne cmps
-# CHECK: repne
-# CHECK-NEXT: cmpsl   %es:(%edi), (%esi)
+# CHECK: repne cmpsl   %es:(%edi), (%esi)
 0xf2 0xa7 #repne cmps
-# CHECK: repne
-# CHECK-NEXT: scasb   %es:(%edi), %al
+# CHECK: repne scasb   %es:(%edi), %al
 0xf2 0xae #repne scas
-# CHECK: repne
-# CHECK-NEXT: scasl   %es:(%edi), %eax
+# CHECK: repne scasl   %es:(%edi), %eax
 0xf2 0xaf #repne scas
 
-# CHECK: repne
-# CHECK-NEXT: scasw   %es:(%edi), %ax
+# CHECK: repne scasw   %es:(%edi), %ax
 0xf2 0x66 0xaf
-# CHECK: repne
-# CHECK-NEXT: scasw   %es:(%edi), %ax
+# CHECK: repne scasw   %es:(%edi), %ax
 0x66 0xf2 0xaf
 
-# CHECK: rep
-# CHECK-NEXT: scasw   %es:(%edi), %ax
+# CHECK: rep scasw   %es:(%edi), %ax
 0xf3 0x66 0xaf
-# CHECK: rep
-# CHECK-NEXT: scasw   %es:(%edi), %ax
+# CHECK: rep scasw   %es:(%edi), %ax
 0x66 0xf3 0xaf
 
-# CHECK: repne
-# CHECK:  insw    %dx, %es:(%edi)
+# CHECK: repne insw    %dx, %es:(%edi)
 0xf2 0x66 0x6d
-# CHECK: repne
-# CHECK:  insw    %dx, %es:(%edi)
+# CHECK: repne insw    %dx, %es:(%edi)
 0x66 0xf2 0x6d
 
-# CHECK: rep
-# CHECK:  insw    %dx, %es:(%edi)
+# CHECK: rep insw    %dx, %es:(%edi)
 0xf3 0x66 0x6d
-# CHECK: rep
-# CHECK:  insw    %dx, %es:(%edi)
+# CHECK: rep insw    %dx, %es:(%edi)
 0x66 0xf3 0x6d

Modified: llvm/trunk/test/MC/Disassembler/X86/prefixes-x86_64.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/X86/prefixes-x86_64.txt?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/X86/prefixes-x86_64.txt (original)
+++ llvm/trunk/test/MC/Disassembler/X86/prefixes-x86_64.txt Fri Nov  3 08:25:13 2017
@@ -9,30 +9,22 @@
 # CHECK: mulsd   %xmm7, %xmm7
 0xf2 0x66 0x0f 0x59 0xff
 
-# CHECK: repne
-# CHECK-NEXT: scasw   %es:(%rdi), %ax
+# CHECK: repne scasw   %es:(%rdi), %ax
 0xf2 0x66 0xaf
-# CHECK: rep
-# CHECK-NEXT: scasw   %es:(%rdi), %ax
+# CHECK: repne scasw   %es:(%rdi), %ax
 0x66 0xf2 0xaf
 
-# CHECK: rep
-# CHECK-NEXT: scasw   %es:(%rdi), %ax
+# CHECK: rep scasw   %es:(%rdi), %ax
 0xf3 0x66 0xaf
-# CHECK: rep
-# CHECK-NEXT: scasw   %es:(%rdi), %ax
+# CHECK: rep scasw   %es:(%rdi), %ax
 0x66 0xf3 0xaf
 
-# CHECK: repne
-# CHECK:  insw    %dx, %es:(%rdi)
+# CHECK: repne insw    %dx, %es:(%rdi)
 0xf2 0x66 0x6d
-# CHECK: repne
-# CHECK:  insw    %dx, %es:(%rdi)
+# CHECK: repne insw    %dx, %es:(%rdi)
 0x66 0xf2 0x6d
 
-# CHECK: rep
-# CHECK:  insw    %dx, %es:(%rdi)
+# CHECK: rep insw    %dx, %es:(%rdi)
 0xf3 0x66 0x6d
-# CHECK: rep
-# CHECK:  insw    %dx, %es:(%rdi)
+# CHECK: rep insw    %dx, %es:(%rdi)
 0x66 0xf3 0x6d

Modified: llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/X86/prefixes.txt?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/X86/prefixes.txt (original)
+++ llvm/trunk/test/MC/Disassembler/X86/prefixes.txt Fri Nov  3 08:25:13 2017
@@ -1,73 +1,53 @@
 # RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s
 
-# CHECK: rep
-# CHECK-NEXT: insb    %dx, %es:(%rdi)
+# CHECK: rep insb    %dx, %es:(%rdi)
 0xf3 0x6c #rep ins
-# CHECK: rep
-# CHECK-NEXT: insl    %dx, %es:(%rdi)
+# CHECK: rep insl    %dx, %es:(%rdi)
 0xf3 0x6d #rep ins
-# CHECK: rep
-# CHECK-NEXT: movsb   (%rsi), %es:(%rdi)
+# CHECK: rep movsb   (%rsi), %es:(%rdi)
 0xf3 0xa4 #rep movs
-# CHECK: rep
-# CHECK-NEXT: movsl   (%rsi), %es:(%rdi)
+# CHECK: rep movsl   (%rsi), %es:(%rdi)
 0xf3 0xa5 #rep movs
-# CHECK: rep
-# CHECK-NEXT: outsb   (%rsi), %dx
+# CHECK: rep outsb   (%rsi), %dx
 0xf3 0x6e #rep outs
-# CHECK: rep
-# CHECK-NEXT: outsl   (%rsi), %dx
+# CHECK: rep outsl   (%rsi), %dx
 0xf3 0x6f #rep outs
-# CHECK: rep
-# CHECK-NEXT: lodsb   (%rsi), %al
+# CHECK: rep lodsb   (%rsi), %al
 0xf3 0xac #rep lods
-# CHECK: rep
-# CHECK-NEXT: lodsl   (%rsi), %eax
+# CHECK: rep lodsl   (%rsi), %eax
 0xf3 0xad #rep lods
-# CHECK: rep
-# CHECK-NEXT: stosb   %al, %es:(%rdi)
+# CHECK: rep stosb   %al, %es:(%rdi)
 0xf3 0xaa #rep stos
-# CHECK: rep
-# CHECK-NEXT: stosl   %eax, %es:(%rdi)
+# CHECK: rep stosl   %eax, %es:(%rdi)
 0xf3 0xab #rep stos
-# CHECK: rep
-# CHECK-NEXT: cmpsb   %es:(%rdi), (%rsi)
+# CHECK: rep cmpsb   %es:(%rdi), (%rsi)
 0xf3 0xa6 #rep cmps
-# CHECK: rep
-# CHECK-NEXT: cmpsl   %es:(%rdi), (%rsi)
+# CHECK: rep cmpsl   %es:(%rdi), (%rsi)
 0xf3 0xa7 #repe cmps
-# CHECK: rep
-# CHECK-NEXT: scasb   %es:(%rdi), %al
+# CHECK: rep scasb   %es:(%rdi), %al
 0xf3 0xae #repe scas
-# CHECK: rep
-# CHECK-NEXT: scasl   %es:(%rdi), %eax
+# CHECK: rep scasl   %es:(%rdi), %eax
 0xf3 0xaf #repe scas
-# CHECK: repne
-# CHECK-NEXT: cmpsb   %es:(%rdi), (%rsi)
+# CHECK: repne cmpsb   %es:(%rdi), (%rsi)
 0xf2 0xa6 #repne cmps
-# CHECK: repne
-# CHECK-NEXT: cmpsl   %es:(%rdi), (%rsi)
+# CHECK: repne cmpsl   %es:(%rdi), (%rsi)
 0xf2 0xa7 #repne cmps
-# CHECK: repne
-# CHECK-NEXT: scasb   %es:(%rdi), %al
+# CHECK: repne scasb   %es:(%rdi), %al
 0xf2 0xae #repne scas
-# CHECK: repne
-# CHECK-NEXT: scasl   %es:(%rdi), %eax
+# CHECK: repne scasl   %es:(%rdi), %eax
 0xf2 0xaf #repne scas
 
 # CHECK: lock
-# CHECK-NEXT:	orl	$16, %fs:776
+# CHECK-NEXT: orl $16, %fs:776
 0xf0 0x64 0x83 0x0c 0x25 0x08 0x03 0x00 0x00 0x10
 
 # CHECK: movq	%fs:768, %rdi
 0x64 0x48 0x8b 0x3c 0x25 0x00 0x03 0x00 0x00
 
-# CHECK: rep
-# CHECK-NEXT:		stosq %rax, %es:(%rdi)
+# CHECK: rep stosq %rax, %es:(%rdi)
 0xf3 0x48 0xab
 
-# CHECK: rep
-# CHECK-NEXT:		stosq %rax, %es:(%edi)
+# CHECK: rep stosq %rax, %es:(%edi)
 0xf3 0x67 0x48 0xab
 
 # CHECK: movl 32(%rbp), %eax
@@ -104,11 +84,9 @@
 0x66,0x83,0xc0,0xf4
 
 # Test that multiple redundant prefixes work (redundant, but valid x86).
-# CHECK: rep
-# CHECK-NEXT: stosq
+# CHECK: rep stosq
 0xf3 0xf3 0x48 0xab
 
-
 # Test that we can disassembler control registers above CR8
 # CHECK: movq %cr15, %rax
 0x44 0x0f 0x20 0xf8

Modified: llvm/trunk/test/MC/Disassembler/X86/simple-tests.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/X86/simple-tests.txt?rev=317330&r1=317329&r2=317330&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/X86/simple-tests.txt (original)
+++ llvm/trunk/test/MC/Disassembler/X86/simple-tests.txt Fri Nov  3 08:25:13 2017
@@ -851,14 +851,11 @@
 0xf0 0x48 0x0f 0xc1 0xcb
 
 # rdar://13493622 lldb doesn't print the x86 rep/repne prefix when disassembling
-# CHECK: repne
-# CHECK-NEXT: movsl
+# CHECK: repne movsl
 0xf2 0xa5
-# CHECK: repne
-# CHECK-NEXT: movsq
+# CHECK: repne movsq
 0xf2 0x48 0xa5
-# CHECK: repne
-# CHECK-NEXT: movb  $0, (%rax)
+# CHECK: repne movb  $0, (%rax)
 0xf2 0xc6 0x0 0x0
 
 # rdar://11019859 Support 2013 Haswell RTM instructions and HLE prefixes




More information about the llvm-commits mailing list