brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · 7e10db7 Raw
380 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=powerpc-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC3; RUN: llc -mcpu=ppc -mtriple=powerpc64-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC644; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC64LE5 6; Testing operations in soft-float mode7define double @foo() #0 {8; PPC-LABEL: foo:9; PPC:       # %bb.0: # %entry10; PPC-NEXT:    mflr 011; PPC-NEXT:    stwu 1, -32(1)12; PPC-NEXT:    stw 0, 36(1)13; PPC-NEXT:    lwz 3, 24(1)14; PPC-NEXT:    lwz 4, 28(1)15; PPC-NEXT:    lwz 5, 16(1)16; PPC-NEXT:    lwz 6, 20(1)17; PPC-NEXT:    bl __adddf318; PPC-NEXT:    lwz 0, 36(1)19; PPC-NEXT:    addi 1, 1, 3220; PPC-NEXT:    mtlr 021; PPC-NEXT:    blr22;23; PPC64-LABEL: foo:24; PPC64:       # %bb.0: # %entry25; PPC64-NEXT:    mflr 026; PPC64-NEXT:    stdu 1, -128(1)27; PPC64-NEXT:    std 0, 144(1)28; PPC64-NEXT:    ld 3, 120(1)29; PPC64-NEXT:    ld 4, 112(1)30; PPC64-NEXT:    bl __adddf331; PPC64-NEXT:    nop32; PPC64-NEXT:    addi 1, 1, 12833; PPC64-NEXT:    ld 0, 16(1)34; PPC64-NEXT:    mtlr 035; PPC64-NEXT:    blr36;37; PPC64LE-LABEL: foo:38; PPC64LE:       # %bb.0: # %entry39; PPC64LE-NEXT:    mflr 040; PPC64LE-NEXT:    stdu 1, -48(1)41; PPC64LE-NEXT:    std 0, 64(1)42; PPC64LE-NEXT:    ld 3, 40(1)43; PPC64LE-NEXT:    ld 4, 32(1)44; PPC64LE-NEXT:    bl __adddf345; PPC64LE-NEXT:    nop46; PPC64LE-NEXT:    addi 1, 1, 4847; PPC64LE-NEXT:    ld 0, 16(1)48; PPC64LE-NEXT:    mtlr 049; PPC64LE-NEXT:    blr50entry:51  %a = alloca double, align 852  %b = alloca double, align 853  %0 = load double, ptr %a, align 854  %1 = load double, ptr %b, align 855  %add = fadd double %0, %156  ret double %add57}58 59define double @foo1() #0 {60; PPC-LABEL: foo1:61; PPC:       # %bb.0: # %entry62; PPC-NEXT:    mflr 063; PPC-NEXT:    stwu 1, -32(1)64; PPC-NEXT:    stw 0, 36(1)65; PPC-NEXT:    lwz 3, 24(1)66; PPC-NEXT:    lwz 4, 28(1)67; PPC-NEXT:    lwz 5, 16(1)68; PPC-NEXT:    lwz 6, 20(1)69; PPC-NEXT:    bl __muldf370; PPC-NEXT:    lwz 0, 36(1)71; PPC-NEXT:    addi 1, 1, 3272; PPC-NEXT:    mtlr 073; PPC-NEXT:    blr74;75; PPC64-LABEL: foo1:76; PPC64:       # %bb.0: # %entry77; PPC64-NEXT:    mflr 078; PPC64-NEXT:    stdu 1, -128(1)79; PPC64-NEXT:    std 0, 144(1)80; PPC64-NEXT:    ld 3, 120(1)81; PPC64-NEXT:    ld 4, 112(1)82; PPC64-NEXT:    bl __muldf383; PPC64-NEXT:    nop84; PPC64-NEXT:    addi 1, 1, 12885; PPC64-NEXT:    ld 0, 16(1)86; PPC64-NEXT:    mtlr 087; PPC64-NEXT:    blr88;89; PPC64LE-LABEL: foo1:90; PPC64LE:       # %bb.0: # %entry91; PPC64LE-NEXT:    mflr 092; PPC64LE-NEXT:    stdu 1, -48(1)93; PPC64LE-NEXT:    std 0, 64(1)94; PPC64LE-NEXT:    ld 3, 40(1)95; PPC64LE-NEXT:    ld 4, 32(1)96; PPC64LE-NEXT:    bl __muldf397; PPC64LE-NEXT:    nop98; PPC64LE-NEXT:    addi 1, 1, 4899; PPC64LE-NEXT:    ld 0, 16(1)100; PPC64LE-NEXT:    mtlr 0101; PPC64LE-NEXT:    blr102entry:103  %a = alloca double, align 8104  %b = alloca double, align 8105  %0 = load double, ptr %a, align 8106  %1 = load double, ptr %b, align 8107  %mul = fmul double %0, %1108  ret double %mul109}110 111define double @foo2() #0 {112; PPC-LABEL: foo2:113; PPC:       # %bb.0: # %entry114; PPC-NEXT:    mflr 0115; PPC-NEXT:    stwu 1, -32(1)116; PPC-NEXT:    stw 0, 36(1)117; PPC-NEXT:    lwz 3, 24(1)118; PPC-NEXT:    lwz 4, 28(1)119; PPC-NEXT:    lwz 5, 16(1)120; PPC-NEXT:    lwz 6, 20(1)121; PPC-NEXT:    bl __subdf3122; PPC-NEXT:    lwz 0, 36(1)123; PPC-NEXT:    addi 1, 1, 32124; PPC-NEXT:    mtlr 0125; PPC-NEXT:    blr126;127; PPC64-LABEL: foo2:128; PPC64:       # %bb.0: # %entry129; PPC64-NEXT:    mflr 0130; PPC64-NEXT:    stdu 1, -128(1)131; PPC64-NEXT:    std 0, 144(1)132; PPC64-NEXT:    ld 3, 120(1)133; PPC64-NEXT:    ld 4, 112(1)134; PPC64-NEXT:    bl __subdf3135; PPC64-NEXT:    nop136; PPC64-NEXT:    addi 1, 1, 128137; PPC64-NEXT:    ld 0, 16(1)138; PPC64-NEXT:    mtlr 0139; PPC64-NEXT:    blr140;141; PPC64LE-LABEL: foo2:142; PPC64LE:       # %bb.0: # %entry143; PPC64LE-NEXT:    mflr 0144; PPC64LE-NEXT:    stdu 1, -48(1)145; PPC64LE-NEXT:    std 0, 64(1)146; PPC64LE-NEXT:    ld 3, 40(1)147; PPC64LE-NEXT:    ld 4, 32(1)148; PPC64LE-NEXT:    bl __subdf3149; PPC64LE-NEXT:    nop150; PPC64LE-NEXT:    addi 1, 1, 48151; PPC64LE-NEXT:    ld 0, 16(1)152; PPC64LE-NEXT:    mtlr 0153; PPC64LE-NEXT:    blr154entry:155  %a = alloca double, align 8156  %b = alloca double, align 8157  %0 = load double, ptr %a, align 8158  %1 = load double, ptr %b, align 8159  %sub = fsub double %0, %1160  ret double %sub161}162 163define double @foo3() #0 {164; PPC-LABEL: foo3:165; PPC:       # %bb.0: # %entry166; PPC-NEXT:    mflr 0167; PPC-NEXT:    stwu 1, -32(1)168; PPC-NEXT:    stw 0, 36(1)169; PPC-NEXT:    lwz 3, 24(1)170; PPC-NEXT:    lwz 4, 28(1)171; PPC-NEXT:    lwz 5, 16(1)172; PPC-NEXT:    lwz 6, 20(1)173; PPC-NEXT:    bl __divdf3174; PPC-NEXT:    lwz 0, 36(1)175; PPC-NEXT:    addi 1, 1, 32176; PPC-NEXT:    mtlr 0177; PPC-NEXT:    blr178;179; PPC64-LABEL: foo3:180; PPC64:       # %bb.0: # %entry181; PPC64-NEXT:    mflr 0182; PPC64-NEXT:    stdu 1, -128(1)183; PPC64-NEXT:    std 0, 144(1)184; PPC64-NEXT:    ld 3, 120(1)185; PPC64-NEXT:    ld 4, 112(1)186; PPC64-NEXT:    bl __divdf3187; PPC64-NEXT:    nop188; PPC64-NEXT:    addi 1, 1, 128189; PPC64-NEXT:    ld 0, 16(1)190; PPC64-NEXT:    mtlr 0191; PPC64-NEXT:    blr192;193; PPC64LE-LABEL: foo3:194; PPC64LE:       # %bb.0: # %entry195; PPC64LE-NEXT:    mflr 0196; PPC64LE-NEXT:    stdu 1, -48(1)197; PPC64LE-NEXT:    std 0, 64(1)198; PPC64LE-NEXT:    ld 3, 40(1)199; PPC64LE-NEXT:    ld 4, 32(1)200; PPC64LE-NEXT:    bl __divdf3201; PPC64LE-NEXT:    nop202; PPC64LE-NEXT:    addi 1, 1, 48203; PPC64LE-NEXT:    ld 0, 16(1)204; PPC64LE-NEXT:    mtlr 0205; PPC64LE-NEXT:    blr206entry:207  %a = alloca double, align 8208  %b = alloca double, align 8209  %0 = load double, ptr %a, align 8210  %1 = load double, ptr %b, align 8211  %div = fdiv double %0, %1212  ret double %div213}214 215; Function Attrs: noinline nounwind optnone uwtable216define dso_local zeroext i32 @func(double noundef %0, double noundef %1) #0 {217; PPC-LABEL: func:218; PPC:       # %bb.0:219; PPC-NEXT:    mflr 0220; PPC-NEXT:    stwu 1, -32(1)221; PPC-NEXT:    stw 0, 36(1)222; PPC-NEXT:    # kill: def $r7 killed $r6223; PPC-NEXT:    # kill: def $r7 killed $r5224; PPC-NEXT:    # kill: def $r7 killed $r4225; PPC-NEXT:    # kill: def $r7 killed $r3226; PPC-NEXT:    stw 4, 28(1)227; PPC-NEXT:    stw 3, 24(1)228; PPC-NEXT:    stw 6, 20(1)229; PPC-NEXT:    stw 5, 16(1)230; PPC-NEXT:    lwz 3, 24(1)231; PPC-NEXT:    stw 3, 8(1) # 4-byte Folded Spill232; PPC-NEXT:    lwz 3, 28(1)233; PPC-NEXT:    stw 3, 12(1) # 4-byte Folded Spill234; PPC-NEXT:    lwz 3, 16(1)235; PPC-NEXT:    lwz 4, 20(1)236; PPC-NEXT:    lis 5, -15888237; PPC-NEXT:    li 6, 0238; PPC-NEXT:    bl __muldf3239; PPC-NEXT:    mr 5, 3240; PPC-NEXT:    lwz 3, 8(1) # 4-byte Folded Reload241; PPC-NEXT:    mr 6, 4242; PPC-NEXT:    lwz 4, 12(1) # 4-byte Folded Reload243; PPC-NEXT:    bl __adddf3244; PPC-NEXT:    bl __fixunsdfsi245; PPC-NEXT:    lwz 0, 36(1)246; PPC-NEXT:    addi 1, 1, 32247; PPC-NEXT:    mtlr 0248; PPC-NEXT:    blr249;250; PPC64-LABEL: func:251; PPC64:       # %bb.0:252; PPC64-NEXT:    mflr 0253; PPC64-NEXT:    stdu 1, -144(1)254; PPC64-NEXT:    std 0, 160(1)255; PPC64-NEXT:    std 3, 136(1)256; PPC64-NEXT:    std 4, 128(1)257; PPC64-NEXT:    ld 3, 136(1)258; PPC64-NEXT:    std 3, 120(1) # 8-byte Folded Spill259; PPC64-NEXT:    ld 3, 128(1)260; PPC64-NEXT:    li 4, 3103261; PPC64-NEXT:    rldic 4, 4, 52, 0262; PPC64-NEXT:    bl __muldf3263; PPC64-NEXT:    nop264; PPC64-NEXT:    mr 4, 3265; PPC64-NEXT:    ld 3, 120(1) # 8-byte Folded Reload266; PPC64-NEXT:    bl __adddf3267; PPC64-NEXT:    nop268; PPC64-NEXT:    bl __fixunsdfsi269; PPC64-NEXT:    nop270; PPC64-NEXT:    # kill: def $r3 killed $r3 killed $x3271; PPC64-NEXT:    clrldi 3, 3, 32272; PPC64-NEXT:    addi 1, 1, 144273; PPC64-NEXT:    ld 0, 16(1)274; PPC64-NEXT:    mtlr 0275; PPC64-NEXT:    blr276;277; PPC64LE-LABEL: func:278; PPC64LE:       # %bb.0:279; PPC64LE-NEXT:    mflr 0280; PPC64LE-NEXT:    stdu 1, -64(1)281; PPC64LE-NEXT:    std 0, 80(1)282; PPC64LE-NEXT:    std 3, 56(1)283; PPC64LE-NEXT:    std 4, 48(1)284; PPC64LE-NEXT:    ld 3, 56(1)285; PPC64LE-NEXT:    std 3, 40(1) # 8-byte Folded Spill286; PPC64LE-NEXT:    ld 3, 48(1)287; PPC64LE-NEXT:    li 4, 3103288; PPC64LE-NEXT:    rldic 4, 4, 52, 0289; PPC64LE-NEXT:    bl __muldf3290; PPC64LE-NEXT:    nop291; PPC64LE-NEXT:    mr 4, 3292; PPC64LE-NEXT:    ld 3, 40(1) # 8-byte Folded Reload293; PPC64LE-NEXT:    bl __adddf3294; PPC64LE-NEXT:    nop295; PPC64LE-NEXT:    bl __fixunsdfsi296; PPC64LE-NEXT:    nop297; PPC64LE-NEXT:    # kill: def $r3 killed $r3 killed $x3298; PPC64LE-NEXT:    clrldi 3, 3, 32299; PPC64LE-NEXT:    addi 1, 1, 64300; PPC64LE-NEXT:    ld 0, 16(1)301; PPC64LE-NEXT:    mtlr 0302; PPC64LE-NEXT:    blr303  %3 = alloca double, align 8304  %4 = alloca double, align 8305  store double %0, ptr %3, align 8306  store double %1, ptr %4, align 8307  %5 = load double, ptr %3, align 8308  %6 = load double, ptr %4, align 8309  %7 = fneg double %6310  %8 = call double @llvm.fmuladd.f64(double %7, double 0x41F0000000000000, double %5)311  %9 = fptoui double %8 to i32312  ret i32 %9313}314 315; To check ppc_fp128 soften without crash316define zeroext i1 @ppcf128_soften(ppc_fp128 %a) #0 {317; PPC-LABEL: ppcf128_soften:318; PPC:       # %bb.0: # %entry319; PPC-NEXT:    stwu 1, -16(1)320; PPC-NEXT:    stw 5, 8(1) # 4-byte Folded Spill321; PPC-NEXT:    mr 5, 4322; PPC-NEXT:    lwz 4, 8(1) # 4-byte Folded Reload323; PPC-NEXT:    stw 5, 12(1) # 4-byte Folded Spill324; PPC-NEXT:    mr 5, 3325; PPC-NEXT:    lwz 3, 12(1) # 4-byte Folded Reload326; PPC-NEXT:    # kill: def $r4 killed $r3327; PPC-NEXT:    # kill: def $r4 killed $r5328; PPC-NEXT:    xoris 4, 5, 65520329; PPC-NEXT:    or 4, 3, 4330; PPC-NEXT:    cntlzw 4, 4331; PPC-NEXT:    clrlwi 5, 5, 1332; PPC-NEXT:    or 3, 3, 5333; PPC-NEXT:    cntlzw 3, 3334; PPC-NEXT:    or 3, 3, 4335; PPC-NEXT:    srwi 3, 3, 5336; PPC-NEXT:    addi 1, 1, 16337; PPC-NEXT:    blr338;339; PPC64-LABEL: ppcf128_soften:340; PPC64:       # %bb.0: # %entry341; PPC64-NEXT:    li 4, 4095342; PPC64-NEXT:    rldic 4, 4, 52, 0343; PPC64-NEXT:    cmpld 7, 3, 4344; PPC64-NEXT:    mfcr 4 # cr7345; PPC64-NEXT:    rlwinm 4, 4, 31, 31, 31346; PPC64-NEXT:    clrldi 3, 3, 1347; PPC64-NEXT:    cmpldi 7, 3, 0348; PPC64-NEXT:    mfcr 3 # cr7349; PPC64-NEXT:    rlwinm 3, 3, 31, 31, 31350; PPC64-NEXT:    or 4, 3, 4351; PPC64-NEXT:    # implicit-def: $x3352; PPC64-NEXT:    mr 3, 4353; PPC64-NEXT:    clrldi 3, 3, 32354; PPC64-NEXT:    blr355;356; PPC64LE-LABEL: ppcf128_soften:357; PPC64LE:       # %bb.0: # %entry358; PPC64LE-NEXT:    li 3, 4095359; PPC64LE-NEXT:    rldic 3, 3, 52, 0360; PPC64LE-NEXT:    cmpd 4, 3361; PPC64LE-NEXT:    crmove 21, 2362; PPC64LE-NEXT:    clrldi. 3, 4, 1363; PPC64LE-NEXT:    crmove 20, 2364; PPC64LE-NEXT:    cror 20, 20, 21365; PPC64LE-NEXT:    li 4, 0366; PPC64LE-NEXT:    li 3, 1367; PPC64LE-NEXT:    isel 3, 3, 4, 20368; PPC64LE-NEXT:    blr369entry:370  %fpclass = tail call i1 @llvm.is.fpclass.ppcf128(ppc_fp128 %a, i32 100)371  ret i1 %fpclass372}373 374; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)375declare double @llvm.fmuladd.f64(double, double, double) #1376declare i1 @llvm.is.fpclass.ppcf128(ppc_fp128, i32 immarg) #1377 378attributes #0 = {"use-soft-float"="true" nounwind }379attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }380