1*9880d681SAndroid Build Coastguard Worker# RUN: llc -run-pass x86-fixup-bw-insts -mtriple=x86_64-- -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker# Verify that we correctly deal with the flag edge cases when replacing 4*9880d681SAndroid Build Coastguard Worker# copies by bigger copies, which is a pretty unusual transform. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker--- | 7*9880d681SAndroid Build Coastguard Worker target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker define i8 @test_movb_killed(i8 %a0) { 10*9880d681SAndroid Build Coastguard Worker ret i8 %a0 11*9880d681SAndroid Build Coastguard Worker } 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker define i8 @test_movb_impuse(i8 %a0) { 14*9880d681SAndroid Build Coastguard Worker ret i8 %a0 15*9880d681SAndroid Build Coastguard Worker } 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker define i8 @test_movb_impdef_gr64(i8 %a0) { 18*9880d681SAndroid Build Coastguard Worker ret i8 %a0 19*9880d681SAndroid Build Coastguard Worker } 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker define i8 @test_movb_impdef_gr32(i8 %a0) { 22*9880d681SAndroid Build Coastguard Worker ret i8 %a0 23*9880d681SAndroid Build Coastguard Worker } 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker define i8 @test_movb_impdef_gr16(i8 %a0) { 26*9880d681SAndroid Build Coastguard Worker ret i8 %a0 27*9880d681SAndroid Build Coastguard Worker } 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker define i16 @test_movw_impdef_gr32(i16 %a0) { 30*9880d681SAndroid Build Coastguard Worker ret i16 %a0 31*9880d681SAndroid Build Coastguard Worker } 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker define i16 @test_movw_impdef_gr64(i16 %a0) { 34*9880d681SAndroid Build Coastguard Worker ret i16 %a0 35*9880d681SAndroid Build Coastguard Worker } 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker... 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker--- 40*9880d681SAndroid Build Coastguard Workername: test_movb_killed 41*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 42*9880d681SAndroid Build Coastguard WorkerisSSA: false 43*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 44*9880d681SAndroid Build Coastguard Workerliveins: 45*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 46*9880d681SAndroid Build Coastguard Workerbody: | 47*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 48*9880d681SAndroid Build Coastguard Worker liveins: %edi 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %dil 51*9880d681SAndroid Build Coastguard Worker %al = MOV8rr killed %dil 52*9880d681SAndroid Build Coastguard Worker RETQ killed %al 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker... 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker--- 57*9880d681SAndroid Build Coastguard Workername: test_movb_impuse 58*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 59*9880d681SAndroid Build Coastguard WorkerisSSA: false 60*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 61*9880d681SAndroid Build Coastguard Workerliveins: 62*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 63*9880d681SAndroid Build Coastguard Workerbody: | 64*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 65*9880d681SAndroid Build Coastguard Worker liveins: %edi 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %dil 68*9880d681SAndroid Build Coastguard Worker %al = MOV8rr %dil, implicit %edi 69*9880d681SAndroid Build Coastguard Worker RETQ killed %al 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker... 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker--- 74*9880d681SAndroid Build Coastguard Workername: test_movb_impdef_gr64 75*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 76*9880d681SAndroid Build Coastguard WorkerisSSA: false 77*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 78*9880d681SAndroid Build Coastguard Workerliveins: 79*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 80*9880d681SAndroid Build Coastguard Workerbody: | 81*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 82*9880d681SAndroid Build Coastguard Worker liveins: %edi 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %dil, implicit-def %rax 85*9880d681SAndroid Build Coastguard Worker %al = MOV8rr %dil, implicit-def %rax 86*9880d681SAndroid Build Coastguard Worker RETQ killed %al 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker... 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker--- 91*9880d681SAndroid Build Coastguard Workername: test_movb_impdef_gr32 92*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 93*9880d681SAndroid Build Coastguard WorkerisSSA: false 94*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 95*9880d681SAndroid Build Coastguard Workerliveins: 96*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 97*9880d681SAndroid Build Coastguard Workerbody: | 98*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 99*9880d681SAndroid Build Coastguard Worker liveins: %edi 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %dil 102*9880d681SAndroid Build Coastguard Worker %al = MOV8rr %dil, implicit-def %eax 103*9880d681SAndroid Build Coastguard Worker RETQ killed %al 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker... 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker--- 108*9880d681SAndroid Build Coastguard Workername: test_movb_impdef_gr16 109*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 110*9880d681SAndroid Build Coastguard WorkerisSSA: false 111*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 112*9880d681SAndroid Build Coastguard Workerliveins: 113*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 114*9880d681SAndroid Build Coastguard Workerbody: | 115*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 116*9880d681SAndroid Build Coastguard Worker liveins: %edi 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %dil 119*9880d681SAndroid Build Coastguard Worker %al = MOV8rr %dil, implicit-def %ax 120*9880d681SAndroid Build Coastguard Worker RETQ killed %al 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker... 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker--- 125*9880d681SAndroid Build Coastguard Workername: test_movw_impdef_gr32 126*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 127*9880d681SAndroid Build Coastguard WorkerisSSA: false 128*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 129*9880d681SAndroid Build Coastguard Workerliveins: 130*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 131*9880d681SAndroid Build Coastguard Workerbody: | 132*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 133*9880d681SAndroid Build Coastguard Worker liveins: %edi 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %di 136*9880d681SAndroid Build Coastguard Worker %ax = MOV16rr %di, implicit-def %eax 137*9880d681SAndroid Build Coastguard Worker RETQ killed %ax 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker... 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker--- 142*9880d681SAndroid Build Coastguard Workername: test_movw_impdef_gr64 143*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 144*9880d681SAndroid Build Coastguard WorkerisSSA: false 145*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 146*9880d681SAndroid Build Coastguard Workerliveins: 147*9880d681SAndroid Build Coastguard Worker - { reg: '%edi' } 148*9880d681SAndroid Build Coastguard Workerbody: | 149*9880d681SAndroid Build Coastguard Worker bb.0 (%ir-block.0): 150*9880d681SAndroid Build Coastguard Worker liveins: %edi 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker ; CHECK: %eax = MOV32rr undef %edi, implicit %di, implicit-def %rax 153*9880d681SAndroid Build Coastguard Worker %ax = MOV16rr %di, implicit-def %rax 154*9880d681SAndroid Build Coastguard Worker RETQ killed %ax 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker... 157