Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[X86] Detect if EFLAGs is live across XBEGIN pseudo instruction. Add …
…it as livein to the basic blocks created when expanding the pseudo XBEGIN causes several based blocks to be inserted. If flags are live across it we need to make eflags live in the new basic blocks to avoid machine verifier errors. Fixes PR46827 Reviewed By: ivanbaev Differential Revision: https://reviews.llvm.org/D84479 (cherry picked from commit 647e861)
- Loading branch information
Showing
2 changed files
with
75 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
; RUN: llc < %s -mtriple=i686-pc-linux -mattr=+rtm -verify-machineinstrs -stop-after=finalize-isel | FileCheck %s | ||
|
||
; CHECK: body: | | ||
; CHECK: bb.0.bb107: | ||
; CHECK: successors: %bb.3(0x40000000), %bb.4(0x40000000) | ||
; CHECK: %0:gr32 = MOV32rm %fixed-stack.0, 1, $noreg, 0, $noreg :: (load 4 from %fixed-stack.0, align 16) | ||
; CHECK: %1:gr32 = SUB32ri8 %0, 1, implicit-def $eflags | ||
; CHECK: XBEGIN_4 %bb.4, implicit-def $eax | ||
; CHECK: bb.3.bb107: | ||
; CHECK: successors: %bb.5(0x80000000) | ||
; CHECK: liveins: $eflags | ||
; CHECK: %3:gr32 = MOV32ri -1 | ||
; CHECK: JMP_1 %bb.5 | ||
; CHECK: bb.4.bb107: | ||
; CHECK: successors: %bb.5(0x80000000) | ||
; CHECK: liveins: $eflags | ||
; CHECK: XABORT_DEF implicit-def $eax | ||
; CHECK: %4:gr32 = COPY $eax | ||
; CHECK: bb.5.bb107: | ||
; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) | ||
; CHECK: liveins: $eflags | ||
; CHECK: %2:gr32 = PHI %3, %bb.3, %4, %bb.4 | ||
; CHECK: JCC_1 %bb.2, 5, implicit $eflags | ||
; CHECK: JMP_1 %bb.1 | ||
|
||
declare i32 @llvm.x86.xbegin() #0 | ||
|
||
define void @wobble.12(i32 %tmp116) { | ||
bb107: ; preds = %bb42 | ||
%tmp117 = icmp eq i32 %tmp116, 1 | ||
%tmp127 = tail call i32 @llvm.x86.xbegin() #0 | ||
br i1 %tmp117, label %bb129, label %bb250 | ||
|
||
bb129: ; preds = %bb107 | ||
unreachable | ||
|
||
bb250: ; preds = %bb107 | ||
unreachable | ||
} |