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