mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
50b8835451
Summary: As a side-quest for D6629 jvoung pointed out that I should use -verify-machineinstrs and this found a bug in x86-32's handling of EFLAGS for PUSHF/POPF. This patch fixes the use/def, and adds -verify-machineinstrs to all x86 tests which contain 'EFLAGS'. One exception: this patch leaves inline-asm-fpstack.ll as-is because it fails -verify-machineinstrs in a way unrelated to EFLAGS. This patch also modifies cmpxchg-clobber-flags.ll along the lines of what D6629 already does by also testing i386. Test Plan: ninja check Reviewers: t.p.northover, jvoung Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6687 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224359 91177308-0d34-0410-b5e6-96231b3b80d8
20 lines
697 B
LLVM
20 lines
697 B
LLVM
; RUN: llc < %s -verify-machineinstrs -march=x86 | FileCheck %s
|
|
|
|
; CHECK: testl
|
|
|
|
; It's tempting to eliminate the testl instruction here and just use the
|
|
; EFLAGS value from the incl, however it can't be known whether the add
|
|
; will overflow, and if it does the incl would set OF, and the
|
|
; subsequent setg would return true.
|
|
|
|
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
|
|
target triple = "i386-apple-darwin9.6"
|
|
|
|
define i32 @f(i32 %j) nounwind readnone {
|
|
entry:
|
|
%0 = add i32 %j, 1 ; <i32> [#uses=1]
|
|
%1 = icmp sgt i32 %0, 0 ; <i1> [#uses=1]
|
|
%2 = zext i1 %1 to i32 ; <i32> [#uses=1]
|
|
ret i32 %2
|
|
}
|