239 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefixes=PPC64-P8,PPC64-P8-LE3; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s -check-prefixes=PPC64,PPC64-LE4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefixes=PPC64-P8,PPC64-P8-BE5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s -check-prefixes=PPC64,PPC64-BE6; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu < %s | FileCheck %s -check-prefix=PPC327 8define i128 @test_abs(ppc_fp128 %x) nounwind {9; PPC64-P8-LABEL: test_abs:10; PPC64-P8: # %bb.0: # %entry11; PPC64-P8-NEXT: mffprd 3, 112; PPC64-P8-NEXT: mffprd 4, 213; PPC64-P8-NEXT: rldicr 5, 3, 0, 014; PPC64-P8-NEXT: xor 3, 3, 515; PPC64-P8-NEXT: xor 4, 4, 516; PPC64-P8-NEXT: blr17;18; PPC64-LABEL: test_abs:19; PPC64: # %bb.0: # %entry20; PPC64-NEXT: stfd 1, -16(1)21; PPC64-NEXT: stfd 2, -8(1)22; PPC64-NEXT: ld 3, -16(1)23; PPC64-NEXT: ld 4, -8(1)24; PPC64-NEXT: rldicr 5, 3, 0, 025; PPC64-NEXT: xor 3, 3, 526; PPC64-NEXT: xor 4, 4, 527; PPC64-NEXT: blr28;29; PPC32-LABEL: test_abs:30; PPC32: # %bb.0: # %entry31; PPC32-NEXT: stwu 1, -32(1)32; PPC32-NEXT: stfd 1, 24(1)33; PPC32-NEXT: stfd 2, 16(1)34; PPC32-NEXT: lwz 3, 24(1)35; PPC32-NEXT: lwz 5, 16(1)36; PPC32-NEXT: rlwinm 7, 3, 0, 0, 037; PPC32-NEXT: lwz 4, 28(1)38; PPC32-NEXT: xor 3, 3, 739; PPC32-NEXT: lwz 6, 20(1)40; PPC32-NEXT: xor 5, 5, 741; PPC32-NEXT: addi 1, 1, 3242; PPC32-NEXT: blr43entry:44 %0 = tail call ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128 %x)45 %1 = bitcast ppc_fp128 %0 to i12846 ret i128 %147}48 49define i128 @test_neg(ppc_fp128 %x) nounwind {50; PPC64-P8-LABEL: test_neg:51; PPC64-P8: # %bb.0: # %entry52; PPC64-P8-NEXT: mffprd 4, 253; PPC64-P8-NEXT: mffprd 3, 154; PPC64-P8-NEXT: li 5, 155; PPC64-P8-NEXT: rldic 5, 5, 63, 056; PPC64-P8-NEXT: xor 3, 3, 557; PPC64-P8-NEXT: xor 4, 4, 558; PPC64-P8-NEXT: blr59;60; PPC64-LABEL: test_neg:61; PPC64: # %bb.0: # %entry62; PPC64-NEXT: stfd 2, -8(1)63; PPC64-NEXT: stfd 1, -16(1)64; PPC64-NEXT: li 5, 165; PPC64-NEXT: ld 4, -8(1)66; PPC64-NEXT: ld 3, -16(1)67; PPC64-NEXT: rldic 5, 5, 63, 068; PPC64-NEXT: xor 3, 3, 569; PPC64-NEXT: xor 4, 4, 570; PPC64-NEXT: blr71;72; PPC32-LABEL: test_neg:73; PPC32: # %bb.0: # %entry74; PPC32-NEXT: stwu 1, -32(1)75; PPC32-NEXT: stfd 1, 24(1)76; PPC32-NEXT: stfd 2, 16(1)77; PPC32-NEXT: lwz 5, 16(1)78; PPC32-NEXT: lwz 3, 24(1)79; PPC32-NEXT: lwz 4, 28(1)80; PPC32-NEXT: xoris 5, 5, 3276881; PPC32-NEXT: lwz 6, 20(1)82; PPC32-NEXT: xoris 3, 3, 3276883; PPC32-NEXT: addi 1, 1, 3284; PPC32-NEXT: blr85entry:86 %0 = fsub ppc_fp128 0xM80000000000000000000000000000000, %x87 %1 = bitcast ppc_fp128 %0 to i12888 ret i128 %189}90 91define i128 @test_copysign(ppc_fp128 %x, ppc_fp128 %y) nounwind {92; PPC64-P8-LE-LABEL: test_copysign:93; PPC64-P8-LE: # %bb.0: # %entry94; PPC64-P8-LE-NEXT: mflr 095; PPC64-P8-LE-NEXT: stdu 1, -32(1)96; PPC64-P8-LE-NEXT: std 0, 48(1)97; PPC64-P8-LE-NEXT: bl copysignl98; PPC64-P8-LE-NEXT: nop99; PPC64-P8-LE-NEXT: mffprd 3, 1100; PPC64-P8-LE-NEXT: mffprd 4, 2101; PPC64-P8-LE-NEXT: addi 1, 1, 32102; PPC64-P8-LE-NEXT: ld 0, 16(1)103; PPC64-P8-LE-NEXT: mtlr 0104; PPC64-P8-LE-NEXT: blr105;106; PPC64-LE-LABEL: test_copysign:107; PPC64-LE: # %bb.0: # %entry108; PPC64-LE-NEXT: mflr 0109; PPC64-LE-NEXT: stdu 1, -48(1)110; PPC64-LE-NEXT: std 0, 64(1)111; PPC64-LE-NEXT: bl copysignl112; PPC64-LE-NEXT: nop113; PPC64-LE-NEXT: stfd 1, 32(1)114; PPC64-LE-NEXT: stfd 2, 40(1)115; PPC64-LE-NEXT: ld 3, 32(1)116; PPC64-LE-NEXT: ld 4, 40(1)117; PPC64-LE-NEXT: addi 1, 1, 48118; PPC64-LE-NEXT: ld 0, 16(1)119; PPC64-LE-NEXT: mtlr 0120; PPC64-LE-NEXT: blr121;122; PPC64-P8-BE-LABEL: test_copysign:123; PPC64-P8-BE: # %bb.0: # %entry124; PPC64-P8-BE-NEXT: mflr 0125; PPC64-P8-BE-NEXT: stdu 1, -112(1)126; PPC64-P8-BE-NEXT: std 0, 128(1)127; PPC64-P8-BE-NEXT: bl copysignl128; PPC64-P8-BE-NEXT: nop129; PPC64-P8-BE-NEXT: mffprd 3, 1130; PPC64-P8-BE-NEXT: mffprd 4, 2131; PPC64-P8-BE-NEXT: addi 1, 1, 112132; PPC64-P8-BE-NEXT: ld 0, 16(1)133; PPC64-P8-BE-NEXT: mtlr 0134; PPC64-P8-BE-NEXT: blr135;136; PPC64-BE-LABEL: test_copysign:137; PPC64-BE: # %bb.0: # %entry138; PPC64-BE-NEXT: mflr 0139; PPC64-BE-NEXT: stdu 1, -128(1)140; PPC64-BE-NEXT: std 0, 144(1)141; PPC64-BE-NEXT: bl copysignl142; PPC64-BE-NEXT: nop143; PPC64-BE-NEXT: stfd 1, 112(1)144; PPC64-BE-NEXT: stfd 2, 120(1)145; PPC64-BE-NEXT: ld 3, 112(1)146; PPC64-BE-NEXT: ld 4, 120(1)147; PPC64-BE-NEXT: addi 1, 1, 128148; PPC64-BE-NEXT: ld 0, 16(1)149; PPC64-BE-NEXT: mtlr 0150; PPC64-BE-NEXT: blr151;152; PPC32-LABEL: test_copysign:153; PPC32: # %bb.0: # %entry154; PPC32-NEXT: mflr 0155; PPC32-NEXT: stwu 1, -80(1)156; PPC32-NEXT: stw 0, 84(1)157; PPC32-NEXT: stfd 1, 32(1)158; PPC32-NEXT: lwz 3, 36(1)159; PPC32-NEXT: stfd 2, 24(1)160; PPC32-NEXT: stw 3, 52(1)161; PPC32-NEXT: lwz 3, 32(1)162; PPC32-NEXT: stfd 3, 56(1)163; PPC32-NEXT: stw 3, 48(1)164; PPC32-NEXT: lwz 3, 28(1)165; PPC32-NEXT: lfd 4, 64(1)166; PPC32-NEXT: stw 3, 44(1)167; PPC32-NEXT: lwz 3, 24(1)168; PPC32-NEXT: lfd 1, 48(1)169; PPC32-NEXT: stw 3, 40(1)170; PPC32-NEXT: lwz 3, 60(1)171; PPC32-NEXT: lfd 2, 40(1)172; PPC32-NEXT: stw 3, 76(1)173; PPC32-NEXT: lwz 3, 56(1)174; PPC32-NEXT: stw 3, 72(1)175; PPC32-NEXT: lfd 3, 72(1)176; PPC32-NEXT: bl copysignl177; PPC32-NEXT: stfd 1, 8(1)178; PPC32-NEXT: stfd 2, 16(1)179; PPC32-NEXT: lwz 3, 8(1)180; PPC32-NEXT: lwz 4, 12(1)181; PPC32-NEXT: lwz 5, 16(1)182; PPC32-NEXT: lwz 6, 20(1)183; PPC32-NEXT: lwz 0, 84(1)184; PPC32-NEXT: addi 1, 1, 80185; PPC32-NEXT: mtlr 0186; PPC32-NEXT: blr187entry:188 %0 = tail call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 %x, ppc_fp128 %y)189 %1 = bitcast ppc_fp128 %0 to i128190 ret i128 %1191}192 193define i128 @test_copysign_const(ppc_fp128 %x) nounwind {194; PPC64-P8-LABEL: test_copysign_const:195; PPC64-P8: # %bb.0: # %entry196; PPC64-P8-NEXT: mffprd 3, 1197; PPC64-P8-NEXT: li 5, 3019198; PPC64-P8-NEXT: rldic 5, 5, 52, 0199; PPC64-P8-NEXT: rldicr 4, 3, 0, 0200; PPC64-P8-NEXT: li 3, 16399201; PPC64-P8-NEXT: rldic 3, 3, 48, 1202; PPC64-P8-NEXT: or 3, 4, 3203; PPC64-P8-NEXT: xor 4, 4, 5204; PPC64-P8-NEXT: blr205;206; PPC64-LABEL: test_copysign_const:207; PPC64: # %bb.0: # %entry208; PPC64-NEXT: stfd 1, -8(1)209; PPC64-NEXT: li 5, 3019210; PPC64-NEXT: ld 3, -8(1)211; PPC64-NEXT: rldic 5, 5, 52, 0212; PPC64-NEXT: rldicr 4, 3, 0, 0213; PPC64-NEXT: li 3, 16399214; PPC64-NEXT: rldic 3, 3, 48, 1215; PPC64-NEXT: or 3, 4, 3216; PPC64-NEXT: xor 4, 4, 5217; PPC64-NEXT: blr218;219; PPC32-LABEL: test_copysign_const:220; PPC32: # %bb.0: # %entry221; PPC32-NEXT: stwu 1, -32(1)222; PPC32-NEXT: stfd 1, 24(1)223; PPC32-NEXT: li 6, 0224; PPC32-NEXT: lwz 3, 24(1)225; PPC32-NEXT: rlwinm 4, 3, 0, 0, 0226; PPC32-NEXT: oris 3, 4, 16399227; PPC32-NEXT: xoris 5, 4, 48304228; PPC32-NEXT: li 4, 0229; PPC32-NEXT: addi 1, 1, 32230; PPC32-NEXT: blr231entry:232 %0 = tail call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM400F000000000000BCB0000000000000, ppc_fp128 %x)233 %1 = bitcast ppc_fp128 %0 to i128234 ret i128 %1235}236 237declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128)238declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128, ppc_fp128)239