2016-07-14 04:36:03 +08:00
|
|
|
# RUN: llc -run-pass x86-fixup-bw-insts -mtriple=x86_64-- -o - %s | FileCheck %s
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
# Verify that we correctly deal with the flag edge cases when replacing
|
|
|
|
# copies by bigger copies, which is a pretty unusual transform.
|
|
|
|
|
|
|
|
--- |
|
|
|
|
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
|
|
|
|
define i8 @test_movb_killed(i8 %a0) {
|
|
|
|
ret i8 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i8 @test_movb_impuse(i8 %a0) {
|
|
|
|
ret i8 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i8 @test_movb_impdef_gr64(i8 %a0) {
|
|
|
|
ret i8 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i8 @test_movb_impdef_gr32(i8 %a0) {
|
|
|
|
ret i8 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i8 @test_movb_impdef_gr16(i8 %a0) {
|
|
|
|
ret i8 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i16 @test_movw_impdef_gr32(i16 %a0) {
|
|
|
|
ret i16 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
define i16 @test_movw_impdef_gr64(i16 %a0) {
|
|
|
|
ret i16 %a0
|
|
|
|
}
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movb_killed
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
|
|
|
|
$al = MOV8rr killed $dil
|
|
|
|
RETQ killed $al
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movb_impuse
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
|
|
|
|
$al = MOV8rr $dil, implicit $edi
|
|
|
|
RETQ killed $al
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movb_impdef_gr64
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $dil, implicit-def $rax
|
|
|
|
$al = MOV8rr $dil, implicit-def $rax
|
|
|
|
RETQ killed $al
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movb_impdef_gr32
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
|
|
|
|
$al = MOV8rr $dil, implicit-def $eax
|
|
|
|
RETQ killed $al
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movb_impdef_gr16
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
|
|
|
|
$al = MOV8rr $dil, implicit-def $ax
|
|
|
|
RETQ killed $al
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movw_impdef_gr32
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $di
|
|
|
|
$ax = MOV16rr $di, implicit-def $eax
|
|
|
|
RETQ killed $ax
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
---
|
|
|
|
name: test_movw_impdef_gr64
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
2018-02-01 06:04:26 +08:00
|
|
|
- { reg: '$edi' }
|
2016-05-07 09:11:17 +08:00
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
2018-02-01 06:04:26 +08:00
|
|
|
liveins: $edi
|
2016-05-07 09:11:17 +08:00
|
|
|
|
2018-02-01 06:04:26 +08:00
|
|
|
; CHECK: $eax = MOV32rr undef $edi, implicit $di, implicit-def $rax
|
|
|
|
$ax = MOV16rr $di, implicit-def $rax
|
|
|
|
RETQ killed $ax
|
2016-05-07 09:11:17 +08:00
|
|
|
|
|
|
|
...
|