1 ; Check handling of the mftb instruction. 2 ; For CPUs 601 and pwr3, the mftb instruction should be emitted. 3 ; On all other CPUs (including generic, ppc, ppc64), the mfspr instruction 4 ; should be used instead. There should no longer be a deprecated warning 5 ; message emittedfor this instruction for any CPU. 6 7 ; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s 2>&1 \ 8 ; RUN: | FileCheck %s --check-prefix=CHECK-MFSPR 9 ; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s 2>&1 \ 10 ; RUN: | FileCheck %s --check-prefix=CHECK-MFSPR 11 ; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s 2>&1 \ 12 ; RUN: | FileCheck %s --check-prefix=CHECK-MFSPR 13 ; RUN: llc -mtriple=powerpc-unknown-linux-gnu < %s 2>&1 \ 14 ; RUN: | FileCheck %s --check-prefix=CHECK-MFSPR 15 ; RUN: llc -mtriple=powerpc-unknown-linux-gnu -mcpu=ppc < %s 2>&1 \ 16 ; RUN: | FileCheck %s --check-prefix=CHECK-MFSPR 17 ; RUN: llc -mtriple=powerpc-unknown-linux-gnu -mcpu=601 < %s 2>&1 \ 18 ; RUN: | FileCheck %s --check-prefix=CHECK-MFTB 19 ; RUN: llc -mtriple=powerpc-unknown-linux-gnu -mcpu=pwr3 < %s 2>&1 \ 20 ; RUN: | FileCheck %s --check-prefix=CHECK-MFTB 21 22 ; CHECK-MFSPR-NOT: warning: deprecated 23 ; CHECK-MFTB-NOT: warning: deprecated 24 25 define i32 @get_time() { 26 %time = call i32 asm "mftb $0, 268", "=r"() 27 ret i32 %time 28 ; CHECK-MFSPR-LABEL: @get_time 29 ; CHECK-MFSPR: mfspr 3, 268 30 ; CHECK-MFSPR: blr 31 32 ; CHECK-MFTB-LABEL: @get_time 33 ; CHECK-MFTB: mftb 3, 268 34 ; CHECK-MFTB: blr 35 } 36 37 define i32 @get_timeu() { 38 %time = call i32 asm "mftb $0, 269", "=r"() 39 ret i32 %time 40 ; CHECK-MFSPR-LABEL: @get_timeu 41 ; CHECK-MFSPR: mfspr 3, 269 42 ; CHECK-MFSPR: blr 43 44 ; CHECK-MFTB-LABEL: @get_timeu 45 ; CHECK-MFTB: mftbu 3 46 ; CHECK-MFTB: blr 47 } 48 49 define i32 @get_time_e() { 50 %time = call i32 asm "mftb $0", "=r"() 51 ret i32 %time 52 ; CHECK-MFSPR-LABEL: @get_time_e 53 ; CHECK-MFSPR: mfspr 3, 268 54 ; CHECK-MFSPR: blr 55 56 ; CHECK-MFTB-LABEL: @get_time_e 57 ; CHECK-MFTB: mftb 3, 268 58 ; CHECK-MFTB: blr 59 } 60 61 define i32 @get_timeu_e() { 62 %time = call i32 asm "mftbu $0", "=r"() 63 ret i32 %time 64 ; CHECK-MFSPR-LABEL: @get_timeu_e 65 ; CHECK-MFSPR: mfspr 3, 269 66 ; CHECK-MFSPR: blr 67 68 ; CHECK-MFTB-LABEL: @get_timeu_e 69 ; CHECK-MFTB: mftbu 3 70 ; CHECK-MFTB: blr 71 } 72 73