1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux -sink-insts-to-avoid-spills | FileCheck %s -check-prefix=SINK 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Ensure that we sink copy-like instructions into loops to avoid register 5*9880d681SAndroid Build Coastguard Worker; spills. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; CHECK: Spill 8*9880d681SAndroid Build Coastguard Worker; SINK-NOT: Spill 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker%struct.A = type { i32, i32, i32, i32, i32, i32 } 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @_Z1fPhP1A(i8* nocapture readonly %input, %struct.A* %a) { 13*9880d681SAndroid Build Coastguard Worker %1 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 0 14*9880d681SAndroid Build Coastguard Worker %2 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 1 15*9880d681SAndroid Build Coastguard Worker %3 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 2 16*9880d681SAndroid Build Coastguard Worker %4 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 3 17*9880d681SAndroid Build Coastguard Worker %5 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 4 18*9880d681SAndroid Build Coastguard Worker %6 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 5 19*9880d681SAndroid Build Coastguard Worker br label %.backedge 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker.backedge: 22*9880d681SAndroid Build Coastguard Worker %.0 = phi i8* [ %input, %0 ], [ %7, %.backedge.backedge ] 23*9880d681SAndroid Build Coastguard Worker %7 = getelementptr inbounds i8, i8* %.0, i64 1 24*9880d681SAndroid Build Coastguard Worker %8 = load i8, i8* %7, align 1 25*9880d681SAndroid Build Coastguard Worker switch i8 %8, label %.backedge.backedge [ 26*9880d681SAndroid Build Coastguard Worker i8 0, label %9 27*9880d681SAndroid Build Coastguard Worker i8 10, label %10 28*9880d681SAndroid Build Coastguard Worker i8 20, label %11 29*9880d681SAndroid Build Coastguard Worker i8 30, label %12 30*9880d681SAndroid Build Coastguard Worker i8 40, label %13 31*9880d681SAndroid Build Coastguard Worker i8 50, label %14 32*9880d681SAndroid Build Coastguard Worker ] 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; <label>:9 35*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %1) 36*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; <label>:10 39*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %2) 40*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker.backedge.backedge: 43*9880d681SAndroid Build Coastguard Worker br label %.backedge 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; <label>:11 46*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %3) 47*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; <label>:12 50*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %4) 51*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; <label>:13 54*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %5) 55*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; <label>:14 58*9880d681SAndroid Build Coastguard Worker tail call void @_Z6assignPj(i32* %6) 59*9880d681SAndroid Build Coastguard Worker br label %.backedge.backedge 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdeclare void @_Z6assignPj(i32*) 63