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