1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon -O2 -disable-cgp < %s 2*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; Tail duplication can ignore subregister information on PHI nodes, and as 5*9880d681SAndroid Build Coastguard Worker; a result, generate COPY instructions between registers of different classes. 6*9880d681SAndroid Build Coastguard Worker; This could lead to HexagonInstrInfo::copyPhysReg aborting on an unhandled 7*9880d681SAndroid Build Coastguard Worker; src/dst combination. 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32 %x, i64 %y) nounwind { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %a = icmp slt i32 %x, 0 12*9880d681SAndroid Build Coastguard Worker %lo = trunc i64 %y to i32 13*9880d681SAndroid Build Coastguard Worker br i1 %a, label %next, label %tail 14*9880d681SAndroid Build Coastguard Workertail: 15*9880d681SAndroid Build Coastguard Worker br label %join 16*9880d681SAndroid Build Coastguard Workernext: 17*9880d681SAndroid Build Coastguard Worker %c = icmp eq i32 %x, 0 18*9880d681SAndroid Build Coastguard Worker br i1 %c, label %b1, label %tail 19*9880d681SAndroid Build Coastguard Workerb1: 20*9880d681SAndroid Build Coastguard Worker %t1 = lshr i64 %y, 32 21*9880d681SAndroid Build Coastguard Worker %hi = trunc i64 %t1 to i32 22*9880d681SAndroid Build Coastguard Worker br label %join 23*9880d681SAndroid Build Coastguard Workerjoin: 24*9880d681SAndroid Build Coastguard Worker %val = phi i32 [ %hi, %b1 ], [ %lo, %tail ] 25*9880d681SAndroid Build Coastguard Worker ret i32 %val 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker 29