1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mcpu=pwr9 -verify-machineinstrs -mtriple=powerpc64le-unknown-linux \ 3; RUN: < %s | FileCheck --check-prefixes=CHECK,CHECK-P9 %s 4; RUN: llc -mcpu=pwr8 -verify-machineinstrs -mtriple=powerpc64le-unknown-linux \ 5; RUN: < %s | FileCheck --check-prefixes=CHECK,CHECK-P8 %s 6 7declare ppc_fp128 @llvm.ppc.maxfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ...) 8define ppc_fp128 @test_maxfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ppc_fp128 %d) { 9; CHECK-LABEL: test_maxfe: 10; CHECK: # %bb.0: # %entry 11; CHECK-NEXT: fcmpu 0, 6, 4 12; CHECK-NEXT: fcmpu 1, 5, 3 13; CHECK-NEXT: crand 20, 6, 1 14; CHECK-NEXT: cror 20, 5, 20 15; CHECK-NEXT: bc 12, 20, .LBB0_2 16; CHECK-NEXT: # %bb.1: # %entry 17; CHECK-NEXT: fmr 6, 4 18; CHECK-NEXT: .LBB0_2: # %entry 19; CHECK-NEXT: fcmpu 0, 6, 2 20; CHECK-NEXT: bc 12, 20, .LBB0_4 21; CHECK-NEXT: # %bb.3: # %entry 22; CHECK-NEXT: fmr 5, 3 23; CHECK-NEXT: .LBB0_4: # %entry 24; CHECK-NEXT: fcmpu 1, 5, 1 25; CHECK-NEXT: crand 20, 6, 1 26; CHECK-NEXT: cror 20, 5, 20 27; CHECK-NEXT: bc 12, 20, .LBB0_6 28; CHECK-NEXT: # %bb.5: # %entry 29; CHECK-NEXT: fmr 6, 2 30; CHECK-NEXT: .LBB0_6: # %entry 31; CHECK-NEXT: fcmpu 0, 6, 8 32; CHECK-NEXT: bc 12, 20, .LBB0_8 33; CHECK-NEXT: # %bb.7: # %entry 34; CHECK-NEXT: fmr 5, 1 35; CHECK-NEXT: .LBB0_8: # %entry 36; CHECK-NEXT: fcmpu 1, 5, 7 37; CHECK-NEXT: crand 20, 6, 1 38; CHECK-NEXT: cror 20, 5, 20 39; CHECK-NEXT: bc 12, 20, .LBB0_10 40; CHECK-NEXT: # %bb.9: # %entry 41; CHECK-NEXT: fmr 5, 7 42; CHECK-NEXT: .LBB0_10: # %entry 43; CHECK-NEXT: bc 12, 20, .LBB0_12 44; CHECK-NEXT: # %bb.11: # %entry 45; CHECK-NEXT: fmr 6, 8 46; CHECK-NEXT: .LBB0_12: # %entry 47; CHECK-NEXT: fmr 1, 5 48; CHECK-NEXT: fmr 2, 6 49; CHECK-NEXT: blr 50entry: 51 %0 = call ppc_fp128 (ppc_fp128, ppc_fp128, ppc_fp128, ...) @llvm.ppc.maxfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ppc_fp128 %d) 52 ret ppc_fp128 %0 53} 54 55declare double @llvm.ppc.maxfl(double %a, double %b, double %c, ...) 56define double @test_maxfl(double %a, double %b, double %c, double %d) { 57; CHECK-P9-LABEL: test_maxfl: 58; CHECK-P9: # %bb.0: # %entry 59; CHECK-P9-NEXT: xsmaxcdp 0, 3, 2 60; CHECK-P9-NEXT: xsmaxcdp 0, 0, 1 61; CHECK-P9-NEXT: xsmaxcdp 1, 0, 4 62; CHECK-P9-NEXT: blr 63; 64; CHECK-P8-LABEL: test_maxfl: 65; CHECK-P8: # %bb.0: # %entry 66; CHECK-P8-NEXT: xscmpudp 0, 3, 2 67; CHECK-P8-NEXT: ble 0, .LBB1_4 68; CHECK-P8-NEXT: # %bb.1: # %entry 69; CHECK-P8-NEXT: xscmpudp 0, 3, 1 70; CHECK-P8-NEXT: ble 0, .LBB1_5 71; CHECK-P8-NEXT: .LBB1_2: # %entry 72; CHECK-P8-NEXT: xscmpudp 0, 3, 4 73; CHECK-P8-NEXT: ble 0, .LBB1_6 74; CHECK-P8-NEXT: .LBB1_3: # %entry 75; CHECK-P8-NEXT: fmr 1, 3 76; CHECK-P8-NEXT: blr 77; CHECK-P8-NEXT: .LBB1_4: # %entry 78; CHECK-P8-NEXT: fmr 3, 2 79; CHECK-P8-NEXT: xscmpudp 0, 3, 1 80; CHECK-P8-NEXT: bgt 0, .LBB1_2 81; CHECK-P8-NEXT: .LBB1_5: # %entry 82; CHECK-P8-NEXT: fmr 3, 1 83; CHECK-P8-NEXT: xscmpudp 0, 3, 4 84; CHECK-P8-NEXT: bgt 0, .LBB1_3 85; CHECK-P8-NEXT: .LBB1_6: # %entry 86; CHECK-P8-NEXT: fmr 3, 4 87; CHECK-P8-NEXT: fmr 1, 3 88; CHECK-P8-NEXT: blr 89entry: 90 %0 = call double (double, double, double, ...) @llvm.ppc.maxfl(double %a, double %b, double %c, double %d) 91 ret double %0 92} 93 94declare float @llvm.ppc.maxfs(float %a, float %b, float %c, ...) 95define float @test_maxfs(float %a, float %b, float %c, float %d) { 96; CHECK-P9-LABEL: test_maxfs: 97; CHECK-P9: # %bb.0: # %entry 98; CHECK-P9-NEXT: xsmaxcdp 0, 3, 2 99; CHECK-P9-NEXT: xsmaxcdp 0, 0, 1 100; CHECK-P9-NEXT: xsmaxcdp 1, 0, 4 101; CHECK-P9-NEXT: blr 102; 103; CHECK-P8-LABEL: test_maxfs: 104; CHECK-P8: # %bb.0: # %entry 105; CHECK-P8-NEXT: fcmpu 0, 3, 2 106; CHECK-P8-NEXT: ble 0, .LBB2_4 107; CHECK-P8-NEXT: # %bb.1: # %entry 108; CHECK-P8-NEXT: fcmpu 0, 3, 1 109; CHECK-P8-NEXT: ble 0, .LBB2_5 110; CHECK-P8-NEXT: .LBB2_2: # %entry 111; CHECK-P8-NEXT: fcmpu 0, 3, 4 112; CHECK-P8-NEXT: ble 0, .LBB2_6 113; CHECK-P8-NEXT: .LBB2_3: # %entry 114; CHECK-P8-NEXT: fmr 1, 3 115; CHECK-P8-NEXT: blr 116; CHECK-P8-NEXT: .LBB2_4: # %entry 117; CHECK-P8-NEXT: fmr 3, 2 118; CHECK-P8-NEXT: fcmpu 0, 3, 1 119; CHECK-P8-NEXT: bgt 0, .LBB2_2 120; CHECK-P8-NEXT: .LBB2_5: # %entry 121; CHECK-P8-NEXT: fmr 3, 1 122; CHECK-P8-NEXT: fcmpu 0, 3, 4 123; CHECK-P8-NEXT: bgt 0, .LBB2_3 124; CHECK-P8-NEXT: .LBB2_6: # %entry 125; CHECK-P8-NEXT: fmr 3, 4 126; CHECK-P8-NEXT: fmr 1, 3 127; CHECK-P8-NEXT: blr 128entry: 129 %0 = call float (float, float, float, ...) @llvm.ppc.maxfs(float %a, float %b, float %c, float %d) 130 ret float %0 131} 132 133declare ppc_fp128 @llvm.ppc.minfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ...) 134define ppc_fp128 @test_minfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ppc_fp128 %d) { 135; CHECK-LABEL: test_minfe: 136; CHECK: # %bb.0: # %entry 137; CHECK-NEXT: fcmpu 0, 6, 4 138; CHECK-NEXT: fcmpu 1, 5, 3 139; CHECK-NEXT: crand 20, 6, 0 140; CHECK-NEXT: cror 20, 4, 20 141; CHECK-NEXT: bc 12, 20, .LBB3_2 142; CHECK-NEXT: # %bb.1: # %entry 143; CHECK-NEXT: fmr 6, 4 144; CHECK-NEXT: .LBB3_2: # %entry 145; CHECK-NEXT: fcmpu 0, 6, 2 146; CHECK-NEXT: bc 12, 20, .LBB3_4 147; CHECK-NEXT: # %bb.3: # %entry 148; CHECK-NEXT: fmr 5, 3 149; CHECK-NEXT: .LBB3_4: # %entry 150; CHECK-NEXT: fcmpu 1, 5, 1 151; CHECK-NEXT: crand 20, 6, 0 152; CHECK-NEXT: cror 20, 4, 20 153; CHECK-NEXT: bc 12, 20, .LBB3_6 154; CHECK-NEXT: # %bb.5: # %entry 155; CHECK-NEXT: fmr 6, 2 156; CHECK-NEXT: .LBB3_6: # %entry 157; CHECK-NEXT: fcmpu 0, 6, 8 158; CHECK-NEXT: bc 12, 20, .LBB3_8 159; CHECK-NEXT: # %bb.7: # %entry 160; CHECK-NEXT: fmr 5, 1 161; CHECK-NEXT: .LBB3_8: # %entry 162; CHECK-NEXT: fcmpu 1, 5, 7 163; CHECK-NEXT: crand 20, 6, 0 164; CHECK-NEXT: cror 20, 4, 20 165; CHECK-NEXT: bc 12, 20, .LBB3_10 166; CHECK-NEXT: # %bb.9: # %entry 167; CHECK-NEXT: fmr 5, 7 168; CHECK-NEXT: .LBB3_10: # %entry 169; CHECK-NEXT: bc 12, 20, .LBB3_12 170; CHECK-NEXT: # %bb.11: # %entry 171; CHECK-NEXT: fmr 6, 8 172; CHECK-NEXT: .LBB3_12: # %entry 173; CHECK-NEXT: fmr 1, 5 174; CHECK-NEXT: fmr 2, 6 175; CHECK-NEXT: blr 176entry: 177 %0 = call ppc_fp128 (ppc_fp128, ppc_fp128, ppc_fp128, ...) @llvm.ppc.minfe(ppc_fp128 %a, ppc_fp128 %b, ppc_fp128 %c, ppc_fp128 %d) 178 ret ppc_fp128 %0 179} 180 181declare double @llvm.ppc.minfl(double %a, double %b, double %c, ...) 182define double @test_minfl(double %a, double %b, double %c, double %d) { 183; CHECK-P9-LABEL: test_minfl: 184; CHECK-P9: # %bb.0: # %entry 185; CHECK-P9-NEXT: xsmincdp 0, 3, 2 186; CHECK-P9-NEXT: xsmincdp 0, 0, 1 187; CHECK-P9-NEXT: xsmincdp 1, 0, 4 188; CHECK-P9-NEXT: blr 189; 190; CHECK-P8-LABEL: test_minfl: 191; CHECK-P8: # %bb.0: # %entry 192; CHECK-P8-NEXT: xscmpudp 0, 3, 2 193; CHECK-P8-NEXT: bge 0, .LBB4_4 194; CHECK-P8-NEXT: # %bb.1: # %entry 195; CHECK-P8-NEXT: xscmpudp 0, 3, 1 196; CHECK-P8-NEXT: bge 0, .LBB4_5 197; CHECK-P8-NEXT: .LBB4_2: # %entry 198; CHECK-P8-NEXT: xscmpudp 0, 3, 4 199; CHECK-P8-NEXT: bge 0, .LBB4_6 200; CHECK-P8-NEXT: .LBB4_3: # %entry 201; CHECK-P8-NEXT: fmr 1, 3 202; CHECK-P8-NEXT: blr 203; CHECK-P8-NEXT: .LBB4_4: # %entry 204; CHECK-P8-NEXT: fmr 3, 2 205; CHECK-P8-NEXT: xscmpudp 0, 3, 1 206; CHECK-P8-NEXT: blt 0, .LBB4_2 207; CHECK-P8-NEXT: .LBB4_5: # %entry 208; CHECK-P8-NEXT: fmr 3, 1 209; CHECK-P8-NEXT: xscmpudp 0, 3, 4 210; CHECK-P8-NEXT: blt 0, .LBB4_3 211; CHECK-P8-NEXT: .LBB4_6: # %entry 212; CHECK-P8-NEXT: fmr 3, 4 213; CHECK-P8-NEXT: fmr 1, 3 214; CHECK-P8-NEXT: blr 215entry: 216 %0 = call double (double, double, double, ...) @llvm.ppc.minfl(double %a, double %b, double %c, double %d) 217 ret double %0 218} 219 220declare float @llvm.ppc.minfs(float %a, float %b, float %c, ...) 221define float @test_minfs(float %a, float %b, float %c, float %d) { 222; CHECK-P9-LABEL: test_minfs: 223; CHECK-P9: # %bb.0: # %entry 224; CHECK-P9-NEXT: xsmincdp 0, 3, 2 225; CHECK-P9-NEXT: xsmincdp 0, 0, 1 226; CHECK-P9-NEXT: xsmincdp 1, 0, 4 227; CHECK-P9-NEXT: blr 228; 229; CHECK-P8-LABEL: test_minfs: 230; CHECK-P8: # %bb.0: # %entry 231; CHECK-P8-NEXT: fcmpu 0, 3, 2 232; CHECK-P8-NEXT: bge 0, .LBB5_4 233; CHECK-P8-NEXT: # %bb.1: # %entry 234; CHECK-P8-NEXT: fcmpu 0, 3, 1 235; CHECK-P8-NEXT: bge 0, .LBB5_5 236; CHECK-P8-NEXT: .LBB5_2: # %entry 237; CHECK-P8-NEXT: fcmpu 0, 3, 4 238; CHECK-P8-NEXT: bge 0, .LBB5_6 239; CHECK-P8-NEXT: .LBB5_3: # %entry 240; CHECK-P8-NEXT: fmr 1, 3 241; CHECK-P8-NEXT: blr 242; CHECK-P8-NEXT: .LBB5_4: # %entry 243; CHECK-P8-NEXT: fmr 3, 2 244; CHECK-P8-NEXT: fcmpu 0, 3, 1 245; CHECK-P8-NEXT: blt 0, .LBB5_2 246; CHECK-P8-NEXT: .LBB5_5: # %entry 247; CHECK-P8-NEXT: fmr 3, 1 248; CHECK-P8-NEXT: fcmpu 0, 3, 4 249; CHECK-P8-NEXT: blt 0, .LBB5_3 250; CHECK-P8-NEXT: .LBB5_6: # %entry 251; CHECK-P8-NEXT: fmr 3, 4 252; CHECK-P8-NEXT: fmr 1, 3 253; CHECK-P8-NEXT: blr 254entry: 255 %0 = call float (float, float, float, ...) @llvm.ppc.minfs(float %a, float %b, float %c, float %d) 256 ret float %0 257} 258