xref: /llvm-project/llvm/test/CodeGen/PowerPC/mftb.ll (revision a538b0f023e858d0f71a1295bb9084e851ddd361)
14f79f96fSKit Barton; Check handling of the mftb instruction.
24f79f96fSKit Barton; For CPUs 601 and pwr3, the mftb instruction should be emitted.
34f79f96fSKit Barton; On all other CPUs (including generic, ppc, ppc64), the mfspr instruction
44f79f96fSKit Barton; should be used instead. There should no longer be a deprecated warning
54f79f96fSKit Barton; message emittedfor this instruction for any CPU.
64f79f96fSKit Barton
7*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s 2>&1 \
84f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFSPR
9*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s 2>&1 \
104f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFSPR
11*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s 2>&1 \
124f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFSPR
13*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu  < %s 2>&1 \
144f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFSPR
15*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -mcpu=ppc < %s 2>&1 \
164f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFSPR
17*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -mcpu=601 < %s 2>&1 \
184f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFTB
19*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -mcpu=pwr3 < %s 2>&1 \
204f79f96fSKit Barton; RUN:    | FileCheck %s --check-prefix=CHECK-MFTB
214f79f96fSKit Barton
224f79f96fSKit Barton; CHECK-MFSPR-NOT: warning: deprecated
234f79f96fSKit Barton; CHECK-MFTB-NOT: warning: deprecated
244f79f96fSKit Barton
254f79f96fSKit Bartondefine i32 @get_time() {
264f79f96fSKit Barton       %time = call i32 asm "mftb $0, 268", "=r"()
274f79f96fSKit Barton       ret i32 %time
284f79f96fSKit Barton; CHECK-MFSPR-LABEL: @get_time
294f79f96fSKit Barton; CHECK-MFSPR: mfspr 3, 268
304f79f96fSKit Barton; CHECK-MFSPR: blr
314f79f96fSKit Barton
324f79f96fSKit Barton; CHECK-MFTB-LABEL: @get_time
334f79f96fSKit Barton; CHECK-MFTB: mftb 3, 268
344f79f96fSKit Barton; CHECK-MFTB: blr
354f79f96fSKit Barton}
364f79f96fSKit Barton
374f79f96fSKit Bartondefine i32 @get_timeu() {
384f79f96fSKit Barton       %time = call i32 asm "mftb $0, 269", "=r"()
394f79f96fSKit Barton       ret i32 %time
404f79f96fSKit Barton; CHECK-MFSPR-LABEL: @get_timeu
414f79f96fSKit Barton; CHECK-MFSPR: mfspr 3, 269
424f79f96fSKit Barton; CHECK-MFSPR: blr
434f79f96fSKit Barton
444f79f96fSKit Barton; CHECK-MFTB-LABEL: @get_timeu
454f79f96fSKit Barton; CHECK-MFTB: mftbu 3
464f79f96fSKit Barton; CHECK-MFTB: blr
474f79f96fSKit Barton}
484f79f96fSKit Barton
494f79f96fSKit Bartondefine i32 @get_time_e() {
504f79f96fSKit Barton       %time = call i32 asm "mftb $0", "=r"()
514f79f96fSKit Barton       ret i32 %time
524f79f96fSKit Barton; CHECK-MFSPR-LABEL: @get_time_e
534f79f96fSKit Barton; CHECK-MFSPR: mfspr 3, 268
544f79f96fSKit Barton; CHECK-MFSPR: blr
554f79f96fSKit Barton
564f79f96fSKit Barton; CHECK-MFTB-LABEL: @get_time_e
574f79f96fSKit Barton; CHECK-MFTB: mftb 3, 268
584f79f96fSKit Barton; CHECK-MFTB: blr
594f79f96fSKit Barton}
604f79f96fSKit Barton
614f79f96fSKit Bartondefine i32 @get_timeu_e() {
624f79f96fSKit Barton       %time = call i32 asm "mftbu $0", "=r"()
634f79f96fSKit Barton       ret i32 %time
644f79f96fSKit Barton; CHECK-MFSPR-LABEL: @get_timeu_e
654f79f96fSKit Barton; CHECK-MFSPR: mfspr 3, 269
664f79f96fSKit Barton; CHECK-MFSPR: blr
674f79f96fSKit Barton
684f79f96fSKit Barton; CHECK-MFTB-LABEL: @get_timeu_e
694f79f96fSKit Barton; CHECK-MFTB: mftbu 3
704f79f96fSKit Barton; CHECK-MFTB: blr
714f79f96fSKit Barton}
724f79f96fSKit Barton
73