[llvm] r322623 - Allow usage of X86-prefixes as separate instrs.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 17 05:58:43 PST 2018


Merged to 6.0 in r322654. Since this is a recent commit, please let me
know if there are any follow-ups.

On Wed, Jan 17, 2018 at 11:12 AM, Andrew V. Tischenko via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: avt77
> Date: Wed Jan 17 02:12:06 2018
> New Revision: 322623
>
> URL: http://llvm.org/viewvc/llvm-project?rev=322623&view=rev
> Log:
> Allow usage of X86-prefixes as separate instrs.
> Differential Revision: https://reviews.llvm.org/D42102
>
> Modified:
>     llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
>     llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll
>     llvm/trunk/test/MC/X86/x86-64.s
>
> Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=322623&r1=322622&r2=322623&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
> +++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Wed Jan 17 02:12:06 2018
> @@ -2376,6 +2376,13 @@ bool X86AsmParser::ParseInstruction(Pars
>              .Cases("repne", "repnz", X86::IP_HAS_REPEAT_NE)
>              .Default(X86::IP_NO_PREFIX); // Invalid prefix (impossible)
>      Flags |= Prefix;
> +    if (getLexer().is(AsmToken::EndOfStatement)) {
> +      // We don't have real instr with the given prefix
> +      //  let's use the prefix as the instr.
> +      // TODO: there could be several prefixes one after another
> +      Flags = X86::IP_NO_PREFIX;
> +      break;
> +    }
>      Name = Parser.getTok().getString();
>      Parser.Lex(); // eat the prefix
>      // Hack: we could have something like "rep # some comment" or
>
> 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=322623&r1=322622&r2=322623&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/inline-asm-A-constraint.ll Wed Jan 17 02:12:06 2018
> @@ -19,7 +19,8 @@ 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 cmpxchg16b
> +; CHECK: lock
> +; CHECK-NEXT: 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/MC/X86/x86-64.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/x86-64.s?rev=322623&r1=322622&r2=322623&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/X86/x86-64.s (original)
> +++ llvm/trunk/test/MC/X86/x86-64.s Wed Jan 17 02:12:06 2018
> @@ -99,7 +99,8 @@
>  // CHECK: shll $2, %eax
>          sall $2, %eax
>
> -// CHECK: rep movsb
> +// CHECK: rep
> +// CHECK-NEXT: movsb
>  rep     # comment
>  movsb
>
> @@ -1557,3 +1558,38 @@ ptwriteq 0xdeadbeef(%rbx,%rcx,8)
>  // CHECK: ptwriteq %rax
>  // CHECK:  encoding: [0xf3,0x48,0x0f,0xae,0xe0]
>  ptwriteq %rax
> +
> +//  __asm __volatile(
> +//    "pushf        \n\t"
> +//    "popf       \n\t"
> +//    "rep        \n\t"
> +//    ".byte  0x0f, 0xa7, 0xd0"
> +//  );
> +// CHECK: pushfq
> +// CHECK-NEXT: popfq
> +// CHECK-NEXT: rep
> +// CHECK-NEXT: .byte 15
> +// CHECK-NEXT: .byte 167
> +// CHECK-NEXT: .byte 208
> +pushfq
> +popfq
> +rep
> +.byte 15
> +.byte 167
> +.byte 208
> +
> +// CHECK: lock
> +// CHECK: cmpxchgl
> +        cmp $0, %edx
> +        je 1f
> +        lock
> +1:      cmpxchgl %ecx,(%rdi)
> +
> +// CHECK: rep
> +// CHECK-NEXT: byte
> +rep
> +.byte 0xa4      # movsb
> +
> +// CHECK: lock
> +// This line has to be the last one in the file
> +lock
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list