xref: /llvm-project/llvm/test/CodeGen/PowerPC/fence.ll (revision 677ced8af239024439e377e06c93704252a8f179)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix \
3; RUN:   -mcpu=pwr7 < %s | FileCheck %s
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux \
5; RUN:   -mcpu=pwr8 < %s | FileCheck %s
6; RUN: llc < %s -mtriple powerpc64le-unknown-linux -debug-only=machine-scheduler \
7; RUN:   2>&1 | FileCheck %s --check-prefix=LOG
8
9; REQUIRES: asserts
10
11define dso_local void @test_builtin_ppc_fence() {
12; CHECK-LABEL: test_builtin_ppc_fence:
13; CHECK:       # %bb.0: # %entry
14; CHECK-NEXT:    #FENCE
15; CHECK-NEXT:    blr
16entry:
17  call void @llvm.ppc.fence()
18  ret void
19}
20declare void @llvm.ppc.fence()
21
22; LOG: ***** MI Scheduling *****
23; LOG-NEXT: motion:%bb.0 entry
24; LOG: ExitSU: FENCE implicit-def dead $rm
25; LOG: ***** MI Scheduling *****
26; LOG-NEXT: motion:%bb.0 entry
27; LOG: ExitSU: FENCE implicit-def dead $rm
28;
29; LOG: ***** MI Scheduling *****
30; LOG-NEXT: motion:%bb.0 entry
31; LOG: ExitSU: FENCE implicit-def dead $rm
32; LOG: ***** MI Scheduling *****
33; LOG-NEXT: motion:%bb.0 entry
34; LOG: ExitSU: FENCE implicit-def dead $rm
35define double @motion(double %a, double %b, double %c, double %d) {
36entry:
37  %0 = fdiv double %a, %b
38  %1 = fdiv double %b, %d
39  call void @llvm.ppc.fence()
40  %2 = fdiv double %c, %d
41  %3 = fdiv double %a, %c
42  call void @llvm.ppc.fence()
43  %4 = fadd double %0, %1
44  %5 = fadd double %2, %3
45  %6 = fsub double %4, %5
46  ret double %6
47}
48