|
|
@@ -0,0 +1,144 @@ |
|
|
# RUN: llc -mtriple=i686-- -o - -run-pass=machine-scheduler -debug %s 2>&1 | FileCheck %s |
|
|
# REQUIRES: asserts |
|
|
|
|
|
--- | |
|
|
%struct.Macroblock.0.1.2.3.6.17 = type { i32, i32, i32, i32, i32, [8 x i32], %struct.Macroblock.0.1.2.3.6.17*, %struct.Macroblock.0.1.2.3.6.17*, i32, [2 x [4 x [4 x [2 x i32]]]], [16 x i8], [16 x i8], i32, i64, [4 x i32], [4 x i32], i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, double, i32, i32, i32, i32, i32, i32, i32, i32, i32 } |
|
|
|
|
|
define void @stepsystem(i32 %x) { |
|
|
entry: |
|
|
%0 = load i32, i32* undef, align 8 |
|
|
%inc = add i32 %x, 1 |
|
|
store i32 %inc, i32* undef, align 8 |
|
|
store <2 x double> <double 0xD47D42AEA2879F2E, double 0xD47D42AEA2879F2E>, <2 x double>* undef, align 8 |
|
|
ret void |
|
|
} |
|
|
|
|
|
define void @dct_chroma() { |
|
|
cond_true2732.preheader: |
|
|
%tmp2666 = getelementptr %struct.Macroblock.0.1.2.3.6.17, %struct.Macroblock.0.1.2.3.6.17* null, i32 0, i32 13 |
|
|
%tmp2667.us.us = load i64, i64* %tmp2666, align 4 |
|
|
%tmp2670.us.us = load i64, i64* null, align 4 |
|
|
%tmp2675.us.us = shl i64 %tmp2670.us.us, 0 |
|
|
%tmp2675not.us.us = xor i64 %tmp2675.us.us, -1 |
|
|
%tmp2676.us.us = and i64 %tmp2667.us.us, %tmp2675not.us.us |
|
|
store i64 %tmp2676.us.us, i64* %tmp2666, align 4 |
|
|
ret void |
|
|
} |
|
|
|
|
|
... |
|
|
--- |
|
|
name: stepsystem |
|
|
alignment: 16 |
|
|
exposesReturnsTwice: false |
|
|
legalized: false |
|
|
regBankSelected: false |
|
|
selected: false |
|
|
failedISel: false |
|
|
tracksRegLiveness: true |
|
|
hasWinCFI: false |
|
|
registers: |
|
|
- { id: 0, class: gr32, preferred-register: '' } |
|
|
- { id: 1, class: gr32, preferred-register: '' } |
|
|
- { id: 2, class: gr32, preferred-register: '' } |
|
|
- { id: 3, class: gr32, preferred-register: '' } |
|
|
- { id: 4, class: gr32, preferred-register: '' } |
|
|
liveins: [] |
|
|
frameInfo: |
|
|
isFrameAddressTaken: false |
|
|
isReturnAddressTaken: false |
|
|
hasStackMap: false |
|
|
hasPatchPoint: false |
|
|
stackSize: 0 |
|
|
offsetAdjustment: 0 |
|
|
maxAlignment: 4 |
|
|
adjustsStack: false |
|
|
hasCalls: false |
|
|
stackProtector: '' |
|
|
maxCallFrameSize: 4294967295 |
|
|
cvBytesOfCalleeSavedRegisters: 0 |
|
|
hasOpaqueSPAdjustment: false |
|
|
hasVAStart: false |
|
|
hasMustTailInVarArgFunc: false |
|
|
localFrameSize: 0 |
|
|
savePoint: '' |
|
|
restorePoint: '' |
|
|
fixedStack: |
|
|
- { id: 0, type: default, offset: 0, size: 4, alignment: 4, stack-id: default, |
|
|
isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true, |
|
|
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
|
|
stack: [] |
|
|
callSites: [] |
|
|
constants: [] |
|
|
machineFunctionInfo: {} |
|
|
body: | |
|
|
bb.0.entry: |
|
|
%1:gr32 = MOV32rm %fixed-stack.0, 1, $noreg, 0, $noreg :: (load 4 from %fixed-stack.0) |
|
|
%1:gr32 = INC32r %1, implicit-def dead $eflags |
|
|
MOV32mr undef %2:gr32, 1, $noreg, 0, $noreg, %1 :: (store 4 into `i32* undef`, align 8) |
|
|
MOV32mi undef %3:gr32, 1, $noreg, 0, $noreg, -729988434 :: (store 4 into `<2 x double>* undef` + 12) |
|
|
MOV32mi undef %4:gr32, 1, $noreg, 0, $noreg, -1568170194 :: (store 4 into `<2 x double>* undef` + 8, align 8) |
|
|
RET 0 |
|
|
|
|
|
# CHECK-LABEL: stepsystem |
|
|
# CHECK: Not adding chain dependency{{[[:space:]]*}}from: MOV32mi {{.*}} :: (store 4 {{.*}}){{[[:space:]]*}}to: MOV32mi {{.*}} :: (store 4 {{.*}}) |
|
|
# CHECK: Adding chain dependency{{[[:space:]]*}}from: MOV32mi {{.*}} :: (store 4 {{.*}}){{[[:space:]]*}}to: MOV32mr {{.*}} :: (store 4 {{.*}}) |
|
|
... |
|
|
--- |
|
|
name: dct_chroma |
|
|
alignment: 16 |
|
|
exposesReturnsTwice: false |
|
|
legalized: false |
|
|
regBankSelected: false |
|
|
selected: false |
|
|
failedISel: false |
|
|
tracksRegLiveness: true |
|
|
hasWinCFI: false |
|
|
registers: |
|
|
- { id: 0, class: gr32, preferred-register: '' } |
|
|
- { id: 1, class: gr32, preferred-register: '' } |
|
|
- { id: 2, class: gr32, preferred-register: '' } |
|
|
- { id: 3, class: gr32, preferred-register: '' } |
|
|
- { id: 4, class: gr32, preferred-register: '' } |
|
|
liveins: [] |
|
|
frameInfo: |
|
|
isFrameAddressTaken: false |
|
|
isReturnAddressTaken: false |
|
|
hasStackMap: false |
|
|
hasPatchPoint: false |
|
|
stackSize: 0 |
|
|
offsetAdjustment: 0 |
|
|
maxAlignment: 1 |
|
|
adjustsStack: false |
|
|
hasCalls: false |
|
|
stackProtector: '' |
|
|
maxCallFrameSize: 4294967295 |
|
|
cvBytesOfCalleeSavedRegisters: 0 |
|
|
hasOpaqueSPAdjustment: false |
|
|
hasVAStart: false |
|
|
hasMustTailInVarArgFunc: false |
|
|
localFrameSize: 0 |
|
|
savePoint: '' |
|
|
restorePoint: '' |
|
|
fixedStack: [] |
|
|
stack: [] |
|
|
callSites: [] |
|
|
constants: [] |
|
|
machineFunctionInfo: {} |
|
|
body: | |
|
|
bb.0.cond_true2732.preheader: |
|
|
%4:gr32 = MOV32rm $noreg, 1, $noreg, 0, $noreg :: (load 4 from `i64* null`) |
|
|
%2:gr32 = MOV32rm $noreg, 1, $noreg, 4, $noreg :: (load 4 from `i64* null` + 4) |
|
|
%2:gr32 = NOT32r %2 |
|
|
%4:gr32 = NOT32r %4 |
|
|
%4:gr32 = AND32rm %4, $noreg, 1, $noreg, 356, $noreg, implicit-def dead $eflags :: (load 4 from %ir.tmp2666) |
|
|
AND32mr $noreg, 1, $noreg, 360, $noreg, %2, implicit-def dead $eflags :: (store 4 into %ir.tmp2666 + 4), (load 4 from %ir.tmp2666 + 4) |
|
|
MOV32mr $noreg, 1, $noreg, 356, $noreg, %4 :: (store 4 into %ir.tmp2666) |
|
|
RET 0 |
|
|
|
|
|
# Chain dependencies should not be systematically added when at least one of |
|
|
# the instructions has more than one memory operand. It should only be added |
|
|
# where it would be needed. |
|
|
# CHECK-LABEL: dct_chroma |
|
|
# CHECK: Not adding chain dependency{{[[:space:]]*}}from: MOV32mr {{.*}} :: (store 4 {{.*}}){{[[:space:]]*}}to: AND32mr {{.*}} :: (store 4 {{.*}}), (load 4 {{.*}}) |
|
|
# CHECK: Adding chain dependency{{[[:space:]]*}}from: AND32mr {{.*}} :: (store 4 {{.*}}), (load 4 {{.*}}){{[[:space:]]*}}to: %{{.*}} = MOV32rm {{.*}} :: (load 4 {{.*}}) |
|
|
|