1*9880d681SAndroid Build Coastguard Worker; RUN: not llc < %s -mtriple=thumb-none-eabi -mcpu=cortex-m4 2>&1 | FileCheck %s --check-prefix=V7M 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv8m.base-none-eabi 2>&1 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; V7M: LLVM ERROR: Invalid register name "sp_ns". 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @read_mclass_registers() nounwind { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: read_mclass_registers: 9*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r0, apsr 10*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, iapsr 11*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, eapsr 12*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, xpsr 13*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, ipsr 14*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, epsr 15*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, iepsr 16*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, msp 17*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, psp 18*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, primask 19*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, control 20*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, msplim 21*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, psplim 22*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, msp_ns 23*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, psp_ns 24*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, primask_ns 25*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, control_ns 26*9880d681SAndroid Build Coastguard Worker ; CHECK: mrs r1, sp_ns 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.read_register.i32(metadata !0) 29*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.read_register.i32(metadata !4) 30*9880d681SAndroid Build Coastguard Worker %add1 = add i32 %1, %0 31*9880d681SAndroid Build Coastguard Worker %2 = call i32 @llvm.read_register.i32(metadata !8) 32*9880d681SAndroid Build Coastguard Worker %add2 = add i32 %add1, %2 33*9880d681SAndroid Build Coastguard Worker %3 = call i32 @llvm.read_register.i32(metadata !12) 34*9880d681SAndroid Build Coastguard Worker %add3 = add i32 %add2, %3 35*9880d681SAndroid Build Coastguard Worker %4 = call i32 @llvm.read_register.i32(metadata !16) 36*9880d681SAndroid Build Coastguard Worker %add4 = add i32 %add3, %4 37*9880d681SAndroid Build Coastguard Worker %5 = call i32 @llvm.read_register.i32(metadata !17) 38*9880d681SAndroid Build Coastguard Worker %add5 = add i32 %add4, %5 39*9880d681SAndroid Build Coastguard Worker %6 = call i32 @llvm.read_register.i32(metadata !18) 40*9880d681SAndroid Build Coastguard Worker %add6 = add i32 %add5, %6 41*9880d681SAndroid Build Coastguard Worker %7 = call i32 @llvm.read_register.i32(metadata !19) 42*9880d681SAndroid Build Coastguard Worker %add7 = add i32 %add6, %7 43*9880d681SAndroid Build Coastguard Worker %8 = call i32 @llvm.read_register.i32(metadata !20) 44*9880d681SAndroid Build Coastguard Worker %add8 = add i32 %add7, %8 45*9880d681SAndroid Build Coastguard Worker %9 = call i32 @llvm.read_register.i32(metadata !21) 46*9880d681SAndroid Build Coastguard Worker %add9 = add i32 %add8, %9 47*9880d681SAndroid Build Coastguard Worker %10 = call i32 @llvm.read_register.i32(metadata !25) 48*9880d681SAndroid Build Coastguard Worker %add10 = add i32 %add9, %10 49*9880d681SAndroid Build Coastguard Worker %11 = call i32 @llvm.read_register.i32(metadata !26) 50*9880d681SAndroid Build Coastguard Worker %add11 = add i32 %add10, %11 51*9880d681SAndroid Build Coastguard Worker %12 = call i32 @llvm.read_register.i32(metadata !27) 52*9880d681SAndroid Build Coastguard Worker %add12 = add i32 %add11, %12 53*9880d681SAndroid Build Coastguard Worker %13 = call i32 @llvm.read_register.i32(metadata !28) 54*9880d681SAndroid Build Coastguard Worker %add13 = add i32 %add12, %13 55*9880d681SAndroid Build Coastguard Worker %14 = call i32 @llvm.read_register.i32(metadata !29) 56*9880d681SAndroid Build Coastguard Worker %add14 = add i32 %add13, %14 57*9880d681SAndroid Build Coastguard Worker %15 = call i32 @llvm.read_register.i32(metadata !32) 58*9880d681SAndroid Build Coastguard Worker %add15 = add i32 %add14, %15 59*9880d681SAndroid Build Coastguard Worker %16 = call i32 @llvm.read_register.i32(metadata !35) 60*9880d681SAndroid Build Coastguard Worker %add16 = add i32 %add15, %16 61*9880d681SAndroid Build Coastguard Worker %17 = call i32 @llvm.read_register.i32(metadata !36) 62*9880d681SAndroid Build Coastguard Worker %add17 = add i32 %add16, %17 63*9880d681SAndroid Build Coastguard Worker ret i32 %add10 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine void @write_mclass_registers(i32 %x) nounwind { 67*9880d681SAndroid Build Coastguard Workerentry: 68*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: write_mclass_registers: 69*9880d681SAndroid Build Coastguard Worker ; CHECK: msr apsr, r0 70*9880d681SAndroid Build Coastguard Worker ; CHECK: msr apsr, r0 71*9880d681SAndroid Build Coastguard Worker ; CHECK: msr iapsr, r0 72*9880d681SAndroid Build Coastguard Worker ; CHECK: msr iapsr, r0 73*9880d681SAndroid Build Coastguard Worker ; CHECK: msr eapsr, r0 74*9880d681SAndroid Build Coastguard Worker ; CHECK: msr eapsr, r0 75*9880d681SAndroid Build Coastguard Worker ; CHECK: msr xpsr, r0 76*9880d681SAndroid Build Coastguard Worker ; CHECK: msr xpsr, r0 77*9880d681SAndroid Build Coastguard Worker ; CHECK: msr ipsr, r0 78*9880d681SAndroid Build Coastguard Worker ; CHECK: msr epsr, r0 79*9880d681SAndroid Build Coastguard Worker ; CHECK: msr iepsr, r0 80*9880d681SAndroid Build Coastguard Worker ; CHECK: msr msp, r0 81*9880d681SAndroid Build Coastguard Worker ; CHECK: msr psp, r0 82*9880d681SAndroid Build Coastguard Worker ; CHECK: msr primask, r0 83*9880d681SAndroid Build Coastguard Worker ; CHECK: msr control, r0 84*9880d681SAndroid Build Coastguard Worker ; CHECK: msr msplim, r0 85*9880d681SAndroid Build Coastguard Worker ; CHECK: msr psplim, r0 86*9880d681SAndroid Build Coastguard Worker ; CHECK: msr msp_ns, r0 87*9880d681SAndroid Build Coastguard Worker ; CHECK: msr psp_ns, r0 88*9880d681SAndroid Build Coastguard Worker ; CHECK: msr primask_ns, r0 89*9880d681SAndroid Build Coastguard Worker ; CHECK: msr control_ns, r0 90*9880d681SAndroid Build Coastguard Worker ; CHECK: msr sp_ns, r0 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !0, i32 %x) 93*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !1, i32 %x) 94*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !4, i32 %x) 95*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !5, i32 %x) 96*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !8, i32 %x) 97*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !9, i32 %x) 98*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !12, i32 %x) 99*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !13, i32 %x) 100*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !16, i32 %x) 101*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !17, i32 %x) 102*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !18, i32 %x) 103*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !19, i32 %x) 104*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !20, i32 %x) 105*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !21, i32 %x) 106*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !25, i32 %x) 107*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !26, i32 %x) 108*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !27, i32 %x) 109*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !28, i32 %x) 110*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !29, i32 %x) 111*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !32, i32 %x) 112*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !35, i32 %x) 113*9880d681SAndroid Build Coastguard Worker call void @llvm.write_register.i32(metadata !36, i32 %x) 114*9880d681SAndroid Build Coastguard Worker ret void 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.read_register.i32(metadata) nounwind 118*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.write_register.i32(metadata, i32) nounwind 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker!0 = !{!"apsr"} 121*9880d681SAndroid Build Coastguard Worker!1 = !{!"apsr_nzcvq"} 122*9880d681SAndroid Build Coastguard Worker!4 = !{!"iapsr"} 123*9880d681SAndroid Build Coastguard Worker!5 = !{!"iapsr_nzcvq"} 124*9880d681SAndroid Build Coastguard Worker!8 = !{!"eapsr"} 125*9880d681SAndroid Build Coastguard Worker!9 = !{!"eapsr_nzcvq"} 126*9880d681SAndroid Build Coastguard Worker!12 = !{!"xpsr"} 127*9880d681SAndroid Build Coastguard Worker!13 = !{!"xpsr_nzcvq"} 128*9880d681SAndroid Build Coastguard Worker!16 = !{!"ipsr"} 129*9880d681SAndroid Build Coastguard Worker!17 = !{!"epsr"} 130*9880d681SAndroid Build Coastguard Worker!18 = !{!"iepsr"} 131*9880d681SAndroid Build Coastguard Worker!19 = !{!"msp"} 132*9880d681SAndroid Build Coastguard Worker!20 = !{!"psp"} 133*9880d681SAndroid Build Coastguard Worker!21 = !{!"primask"} 134*9880d681SAndroid Build Coastguard Worker!25 = !{!"control"} 135*9880d681SAndroid Build Coastguard Worker!26 = !{!"msplim"} 136*9880d681SAndroid Build Coastguard Worker!27 = !{!"psplim"} 137*9880d681SAndroid Build Coastguard Worker!28 = !{!"msp_ns"} 138*9880d681SAndroid Build Coastguard Worker!29 = !{!"psp_ns"} 139*9880d681SAndroid Build Coastguard Worker!32 = !{!"primask_ns"} 140*9880d681SAndroid Build Coastguard Worker!35 = !{!"control_ns"} 141*9880d681SAndroid Build Coastguard Worker!36 = !{!"sp_ns"} 142*9880d681SAndroid Build Coastguard Worker 143