1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
Ulrich Weigand 711582147b [SystemZ] Model floating-point control register
This adds the FPC (floating-point control register) as a reserved
physical register and models its use by SystemZ instructions.

Note that only the current rounding modes and the IEEE exception
masks are modeled.  *Changes* of the FPC due to exceptions (in
particular the IEEE exception flags and the DXC) are not modeled.

At this point, this patch is mostly NFC, but it will prevent
scheduling of floating-point instructions across SPFC/LFPC etc.

llvm-svn: 360570
2019-05-13 09:47:26 +00:00

45 lines
1.1 KiB
YAML

# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z10 -no-integrated-as -start-after=block-placement %s -o - | FileCheck %s
# Test that LTEBR is used without an unnecessary LER
--- |
define float @f15(float %val, float %dummy, float* %dest) {
entry:
call void asm sideeffect "blah $0", "{f2}"(float %val)
%cmp = fcmp olt float %val, 0.000000e+00
br i1 %cmp, label %exit, label %store
store: ; preds = %entry
store float %val, float* %dest
br label %exit
exit: ; preds = %store, %entry
ret float %val
}
...
# CHECK: ltebr %f2, %f0
---
name: f15
tracksRegLiveness: true
liveins:
- { reg: '$f0s', virtual-reg: '' }
- { reg: '$r2d', virtual-reg: '' }
body: |
bb.0.entry:
liveins: $f0s, $r2d
LTEBRCompare $f0s, $f0s, implicit-def $cc, implicit $fpc
$f2s = LER $f0s
INLINEASM &"blah $0", 1, 9, $f2s
CondReturn 15, 4, implicit $f0s, implicit $cc
bb.1.store:
liveins: $f0s, $r2d
STE $f0s, killed $r2d, 0, $noreg :: (store 4 into %ir.dest)
Return implicit $f0s
...