mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
a2d7c39420
Work towards the unification of MIR and debug output by refactoring the interfaces. For MachineOperand::print, keep a simple version that can be easily called from `dump()`, and a more complex one which will be called from both the MIRPrinter and MachineInstr::print. Add extra checks inside MachineOperand for detached operands (operands with getParent() == nullptr). https://reviews.llvm.org/D40836 * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: ([^ ]+) ([^ ]+)<def> ([^ ]+)/kill: \1 def \2 \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: ([^ ]+) ([^ ]+) ([^ ]+)<def>/kill: \1 \2 def \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/kill: def ([^ ]+) ([^ ]+) ([^ ]+)<def>/kill: def \1 \2 def \3/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/<def>//g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<kill>/killed \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-use,kill>/implicit killed \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<dead>/dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<def[ ]*,[ ]*dead>/dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-def[ ]*,[ ]*dead>/implicit-def dead \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-def>/implicit-def \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<imp-use>/implicit \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<internal>/internal \1/g' * find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" -o -name "*.s" \) -type f -print0 | xargs -0 sed -i '' -E 's/([^ ]+)<undef>/undef \1/g' llvm-svn: 320022
75 lines
2.9 KiB
LLVM
75 lines
2.9 KiB
LLVM
; RUN: llc -mtriple=x86_64-- -mcpu=core2 -fast-isel -enable-misched -misched=shuffle -misched-bottomup -verify-machineinstrs < %s
|
|
; RUN: llc -mtriple=x86_64-- -mcpu=core2 -fast-isel -enable-misched -misched=shuffle -misched-topdown -verify-machineinstrs < %s
|
|
; REQUIRES: asserts
|
|
;
|
|
; Test the LiveIntervals::handleMove() function.
|
|
;
|
|
; Moving the DIV32r instruction exercises the regunit update code because
|
|
; %edx has a live range into the function and is used by the DIV32r.
|
|
;
|
|
; Here sinking a kill + dead def:
|
|
; 144B -> 180B: DIV32r %4, implicit-def %eax, implicit dead %edx, implicit dead %EFLAGS, implicit killed %eax, implicit %edx
|
|
; %4: [48r,144r:0) 0@48r
|
|
; --> [48r,180r:0) 0@48r
|
|
; DH: [0B,16r:0)[128r,144r:2)[144r,144d:1) 0@0B-phi 1@144r 2@128r
|
|
; --> [0B,16r:0)[128r,180r:2)[180r,180d:1) 0@0B-phi 1@180r 2@128r
|
|
; DL: [0B,16r:0)[128r,144r:2)[144r,144d:1) 0@0B-phi 1@144r 2@128r
|
|
; --> [0B,16r:0)[128r,180r:2)[180r,180d:1) 0@0B-phi 1@180r 2@128r
|
|
;
|
|
define i32 @f1(i32 %a, i32 %b, i32 %c) nounwind uwtable readnone ssp {
|
|
entry:
|
|
%y = add i32 %c, 1
|
|
%x = udiv i32 %b, %a
|
|
%add = add nsw i32 %y, %x
|
|
ret i32 %add
|
|
}
|
|
|
|
; Same as above, but moving a kill + live def:
|
|
; 144B -> 180B: DIV32r %4, implicit dead %eax, implicit-def %edx, implicit dead %EFLAGS, implicit killed %eax, implicit %edx
|
|
; %4: [48r,144r:0) 0@48r
|
|
; --> [48r,180r:0) 0@48r
|
|
; DH: [0B,16r:0)[128r,144r:2)[144r,184r:1) 0@0B-phi 1@144r 2@128r
|
|
; --> [0B,16r:0)[128r,180r:2)[180r,184r:1) 0@0B-phi 1@180r 2@128r
|
|
; DL: [0B,16r:0)[128r,144r:2)[144r,184r:1) 0@0B-phi 1@144r 2@128r
|
|
; --> [0B,16r:0)[128r,180r:2)[180r,184r:1) 0@0B-phi 1@180r 2@128r
|
|
;
|
|
define i32 @f2(i32 %a, i32 %b, i32 %c, i32 %d) nounwind uwtable readnone ssp {
|
|
entry:
|
|
%y = sub i32 %c, %d
|
|
%x = urem i32 %b, %a
|
|
%add = add nsw i32 %x, %y
|
|
ret i32 %add
|
|
}
|
|
|
|
; Moving a use below the existing kill (%5):
|
|
; Moving a tied virtual register def (%11):
|
|
;
|
|
; 96B -> 120B: %11<def,tied1> = SUB32rr %11<tied0>, %5
|
|
; %11: [80r,96r:1)[96r,144r:0) 0@96r 1@80r
|
|
; --> [80r,120r:1)[120r,144r:0) 0@120r 1@80r
|
|
; %5: [16r,112r:0) 0@16r
|
|
; --> [16r,120r:0) 0@16r
|
|
;
|
|
define i32 @f3(i32 %a, i32 %b) nounwind uwtable readnone ssp {
|
|
entry:
|
|
%y = sub i32 %a, %b
|
|
%x = add i32 %a, %b
|
|
%r = mul i32 %x, %y
|
|
ret i32 %r
|
|
}
|
|
|
|
; Move EFLAGS dead def across another def:
|
|
; handleMove 208B -> 36B: %edx = MOV32r0 implicit dead %EFLAGS
|
|
; EFLAGS: [20r,20d:4)[160r,160d:3)[208r,208d:0)[224r,224d:1)[272r,272d:2)[304r,304d:5) 0@208r 1@224r 2@272r 3@160r 4@20r 5@304r
|
|
; --> [20r,20d:4)[36r,36d:0)[160r,160d:3)[224r,224d:1)[272r,272d:2)[304r,304d:5) 0@36r 1@224r 2@272r 3@160r 4@20r 5@304r
|
|
;
|
|
define i32 @f4(i32 %a, i32 %b, i32 %c, i32 %d) nounwind uwtable readnone ssp {
|
|
entry:
|
|
%x = sub i32 %a, %b
|
|
%y = sub i32 %b, %c
|
|
%z = sub i32 %c, %d
|
|
%r1 = udiv i32 %x, %y
|
|
%r2 = mul i32 %z, %r1
|
|
ret i32 %r2
|
|
}
|