brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 762d233 Raw
164 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64le-linux-gnu | FileCheck %s3 4; Verify that the fold of a*b-c*d respect the uses of a*b5define double @fsub1(double %a, double %b, double %c, double %d)  {6; CHECK-LABEL: fsub1:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    xsmuldp 0, 2, 19; CHECK-NEXT:    fmr 1, 010; CHECK-NEXT:    xsnmsubadp 1, 4, 311; CHECK-NEXT:    xsmuldp 1, 0, 112; CHECK-NEXT:    blr13entry:14  %mul = fmul contract reassoc double %b, %a15  %mul1 = fmul contract reassoc double %d, %c16  %sub = fsub contract reassoc nsz double %mul, %mul117  %mul3 = fmul contract reassoc double %mul, %sub18  ret double %mul319}20 21; Verify that the fold of a*b-c*d respect the uses of c*d22define double @fsub2(double %a, double %b, double %c, double %d)  {23; CHECK-LABEL: fsub2:24; CHECK:       # %bb.0: # %entry25; CHECK-NEXT:    xsmuldp 0, 4, 326; CHECK-NEXT:    fmr 3, 027; CHECK-NEXT:    xsmsubadp 3, 2, 128; CHECK-NEXT:    xsmuldp 1, 0, 329; CHECK-NEXT:    blr30entry:31  %mul = fmul contract reassoc double %b, %a32  %mul1 = fmul contract reassoc double %d, %c33  %sub = fsub contract reassoc double %mul, %mul134  %mul3 = fmul contract reassoc double %mul1, %sub35  ret double %mul336}37 38; Verify that the fold of a*b-c*d if there is no uses of a*b and c*d39define double @fsub3(double %a, double %b, double %c, double %d)  {40; CHECK-LABEL: fsub3:41; CHECK:       # %bb.0: # %entry42; CHECK-NEXT:    xsmuldp 0, 4, 343; CHECK-NEXT:    xsmsubadp 0, 2, 144; CHECK-NEXT:    fmr 1, 045; CHECK-NEXT:    blr46entry:47  %mul = fmul contract reassoc double %b, %a48  %mul1 = fmul contract reassoc double %d, %c49  %sub = fsub contract reassoc double %mul, %mul150  ret double %sub51}52 53; Verify that the fold of a*b+c*d respect the uses of a*b54define double @fadd1(double %a, double %b, double %c, double %d)  {55; CHECK-LABEL: fadd1:56; CHECK:       # %bb.0: # %entry57; CHECK-NEXT:    xsmuldp 0, 2, 158; CHECK-NEXT:    fmr 1, 059; CHECK-NEXT:    xsmaddadp 1, 4, 360; CHECK-NEXT:    xsmuldp 1, 0, 161; CHECK-NEXT:    blr62entry:63  %mul = fmul contract reassoc double %b, %a64  %mul1 = fmul contract reassoc double %d, %c65  %add = fadd contract reassoc double %mul1, %mul66  %mul3 = fmul contract reassoc double %mul, %add67  ret double %mul368}69 70; Verify that the fold of a*b+c*d respect the uses of c*d71define double @fadd2(double %a, double %b, double %c, double %d)  {72; CHECK-LABEL: fadd2:73; CHECK:       # %bb.0: # %entry74; CHECK-NEXT:    xsmuldp 0, 4, 375; CHECK-NEXT:    fmr 3, 076; CHECK-NEXT:    xsmaddadp 3, 2, 177; CHECK-NEXT:    xsmuldp 1, 0, 378; CHECK-NEXT:    blr79entry:80  %mul = fmul contract reassoc double %b, %a81  %mul1 = fmul contract reassoc double %d, %c82  %add = fadd contract reassoc double %mul1, %mul83  %mul3 = fmul contract reassoc double %mul1, %add84  ret double %mul385}86 87; Verify that the fold of a*b+c*d if there is no uses of a*b and c*d88define double @fadd3(double %a, double %b, double %c, double %d)  {89; CHECK-LABEL: fadd3:90; CHECK:       # %bb.0: # %entry91; CHECK-NEXT:    xsmuldp 1, 2, 192; CHECK-NEXT:    xsmaddadp 1, 4, 393; CHECK-NEXT:    blr94entry:95  %mul = fmul contract reassoc double %b, %a96  %mul1 = fmul contract reassoc double %d, %c97  %add = fadd contract reassoc double %mul1, %mul98  ret double %add99}100 101define double @fma_multi_uses1(double %a, double %b, double %c, double %d, ptr %p1, ptr %p2, ptr %p3) {102; CHECK-LABEL: fma_multi_uses1:103; CHECK:       # %bb.0:104; CHECK-NEXT:    xsmuldp 1, 1, 2105; CHECK-NEXT:    xsmuldp 0, 3, 4106; CHECK-NEXT:    stfd 1, 0(7)107; CHECK-NEXT:    stfd 1, 0(8)108; CHECK-NEXT:    xsnmsubadp 1, 3, 4109; CHECK-NEXT:    stfd 0, 0(9)110; CHECK-NEXT:    blr111  %ab = fmul contract reassoc double %a, %b112  %cd = fmul contract reassoc double %c, %d113  store double %ab, ptr %p1 ; extra use of %ab114  store double %ab, ptr %p2 ; another extra use of %ab115  store double %cd, ptr %p3 ; extra use of %cd116  %r = fsub contract reassoc nsz double %ab, %cd117  ret double %r118}119 120define double @fma_multi_uses2(double %a, double %b, double %c, double %d, ptr %p1, ptr %p2, ptr %p3) {121; CHECK-LABEL: fma_multi_uses2:122; CHECK:       # %bb.0:123; CHECK-NEXT:    xsmuldp 5, 1, 2124; CHECK-NEXT:    xsmuldp 0, 3, 4125; CHECK-NEXT:    stfd 5, 0(7)126; CHECK-NEXT:    stfd 0, 0(8)127; CHECK-NEXT:    stfd 0, 0(9)128; CHECK-NEXT:    xsmsubadp 0, 1, 2129; CHECK-NEXT:    fmr 1, 0130; CHECK-NEXT:    blr131  %ab = fmul contract reassoc double %a, %b132  %cd = fmul contract reassoc double %c, %d133  store double %ab, ptr %p1 ; extra use of %ab134  store double %cd, ptr %p2 ; extra use of %cd135  store double %cd, ptr %p3 ; another extra use of %cd136  %r = fsub contract reassoc double %ab, %cd137  ret double %r138}139 140define double @fma_multi_uses3(double %a, double %b, double %c, double %d, double %f, double %g, ptr %p1, ptr %p2, ptr %p3) {141; CHECK-LABEL: fma_multi_uses3:142; CHECK:       # %bb.0:143; CHECK-NEXT:    xsmuldp 0, 1, 2144; CHECK-NEXT:    xsmuldp 1, 5, 6145; CHECK-NEXT:    ld 3, 96(1)146; CHECK-NEXT:    stfd 0, 0(9)147; CHECK-NEXT:    stfd 0, 0(10)148; CHECK-NEXT:    stfd 1, 0(3)149; CHECK-NEXT:    xsnmsubadp 1, 3, 4150; CHECK-NEXT:    xsnmsubadp 0, 3, 4151; CHECK-NEXT:    xsadddp 1, 0, 1152; CHECK-NEXT:    blr153  %ab = fmul contract reassoc double %a, %b154  %cd = fmul contract reassoc double %c, %d155  %fg = fmul contract reassoc double %f, %g156  store double %ab, ptr %p1 ; extra use of %ab157  store double %ab, ptr %p2 ; another extra use of %ab158  store double %fg, ptr %p3 ; extra use of %fg159  %q = fsub contract reassoc nsz double %fg, %cd ; The uses of %cd reduce to 1 after %r is folded. 2 uses of %fg, fold %cd, remove def of %cd160  %r = fsub contract reassoc nsz double %ab, %cd ; Fold %r before %q. 3 uses of %ab, 2 uses of %cd, fold %cd161  %add = fadd contract reassoc double %r, %q162  ret double %add163}164