1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
Craig Topper 072406aefc [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
2020-07-27 21:15:35 -07:00

40 lines
1.4 KiB
LLVM

; 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
}