brintos

brintos / llvm-project-archived public Read only

0
0
Text · 72.1 KiB · 903ea69 Raw
2548 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc-unknown-unknown \3; RUN:   -verify-machineinstrs -ppc-asm-full-reg-names < %s | FileCheck %s \4; RUN:   --check-prefix=PPC325; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \6; RUN:   -verify-machineinstrs -ppc-asm-full-reg-names < %s | FileCheck %s \7; RUN:   --check-prefixes=CHECK,P88; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \9; RUN:   -verify-machineinstrs -ppc-asm-full-reg-names < %s | FileCheck %s \10; RUN:   --check-prefixes=CHECK,P911; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -mattr=-hard-float \12; RUN:   -verify-machineinstrs -ppc-asm-full-reg-names < %s | FileCheck %s \13; RUN:   --check-prefix=SOFT14; RUN: llc -mtriple=powerpc64-unknown-unknown \15; RUN:   -verify-machineinstrs -ppc-asm-full-reg-names < %s | FileCheck %s \16; RUN:   --check-prefix=BE17 18; Tests for various operations on half precison float. Much of the test is19; copied from test/CodeGen/X86/half.ll.20 21define void @store(half %x, ptr %p) nounwind {22; PPC32-LABEL: store:23; PPC32:       # %bb.0:24; PPC32-NEXT:    mflr r025; PPC32-NEXT:    stwu r1, -16(r1)26; PPC32-NEXT:    stw r0, 20(r1)27; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill28; PPC32-NEXT:    mr r30, r329; PPC32-NEXT:    bl __truncsfhf230; PPC32-NEXT:    sth r3, 0(r30)31; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload32; PPC32-NEXT:    lwz r0, 20(r1)33; PPC32-NEXT:    addi r1, r1, 1634; PPC32-NEXT:    mtlr r035; PPC32-NEXT:    blr36;37; P8-LABEL: store:38; P8:       # %bb.0:39; P8-NEXT:    mflr r040; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill41; P8-NEXT:    stdu r1, -48(r1)42; P8-NEXT:    std r0, 64(r1)43; P8-NEXT:    mr r30, r444; P8-NEXT:    bl __truncsfhf245; P8-NEXT:    nop46; P8-NEXT:    sth r3, 0(r30)47; P8-NEXT:    addi r1, r1, 4848; P8-NEXT:    ld r0, 16(r1)49; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload50; P8-NEXT:    mtlr r051; P8-NEXT:    blr52;53; P9-LABEL: store:54; P9:       # %bb.0:55; P9-NEXT:    xscvdphp f0, f156; P9-NEXT:    stxsihx f0, 0, r457; P9-NEXT:    blr58;59; SOFT-LABEL: store:60; SOFT:       # %bb.0:61; SOFT-NEXT:    sth r3, 0(r4)62; SOFT-NEXT:    blr63;64; BE-LABEL: store:65; BE:       # %bb.0:66; BE-NEXT:    mflr r067; BE-NEXT:    stdu r1, -128(r1)68; BE-NEXT:    std r0, 144(r1)69; BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill70; BE-NEXT:    mr r30, r471; BE-NEXT:    bl __truncsfhf272; BE-NEXT:    nop73; BE-NEXT:    sth r3, 0(r30)74; BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload75; BE-NEXT:    addi r1, r1, 12876; BE-NEXT:    ld r0, 16(r1)77; BE-NEXT:    mtlr r078; BE-NEXT:    blr79  store half %x, ptr %p80  ret void81}82 83define half @return(ptr %p) nounwind {84; PPC32-LABEL: return:85; PPC32:       # %bb.0:86; PPC32-NEXT:    mflr r087; PPC32-NEXT:    stwu r1, -16(r1)88; PPC32-NEXT:    stw r0, 20(r1)89; PPC32-NEXT:    lhz r3, 0(r3)90; PPC32-NEXT:    bl __extendhfsf291; PPC32-NEXT:    lwz r0, 20(r1)92; PPC32-NEXT:    addi r1, r1, 1693; PPC32-NEXT:    mtlr r094; PPC32-NEXT:    blr95;96; P8-LABEL: return:97; P8:       # %bb.0:98; P8-NEXT:    mflr r099; P8-NEXT:    stdu r1, -32(r1)100; P8-NEXT:    std r0, 48(r1)101; P8-NEXT:    lhz r3, 0(r3)102; P8-NEXT:    bl __extendhfsf2103; P8-NEXT:    nop104; P8-NEXT:    addi r1, r1, 32105; P8-NEXT:    ld r0, 16(r1)106; P8-NEXT:    mtlr r0107; P8-NEXT:    blr108;109; P9-LABEL: return:110; P9:       # %bb.0:111; P9-NEXT:    lxsihzx f0, 0, r3112; P9-NEXT:    xscvhpdp f1, f0113; P9-NEXT:    blr114;115; SOFT-LABEL: return:116; SOFT:       # %bb.0:117; SOFT-NEXT:    lhz r3, 0(r3)118; SOFT-NEXT:    blr119;120; BE-LABEL: return:121; BE:       # %bb.0:122; BE-NEXT:    mflr r0123; BE-NEXT:    stdu r1, -112(r1)124; BE-NEXT:    std r0, 128(r1)125; BE-NEXT:    lhz r3, 0(r3)126; BE-NEXT:    bl __extendhfsf2127; BE-NEXT:    nop128; BE-NEXT:    addi r1, r1, 112129; BE-NEXT:    ld r0, 16(r1)130; BE-NEXT:    mtlr r0131; BE-NEXT:    blr132  %r = load half, ptr %p133  ret half %r134}135 136define dso_local double @loadd(ptr nocapture readonly %a) local_unnamed_addr nounwind {137; PPC32-LABEL: loadd:138; PPC32:       # %bb.0: # %entry139; PPC32-NEXT:    mflr r0140; PPC32-NEXT:    stwu r1, -16(r1)141; PPC32-NEXT:    stw r0, 20(r1)142; PPC32-NEXT:    lhz r3, 2(r3)143; PPC32-NEXT:    bl __extendhfsf2144; PPC32-NEXT:    lwz r0, 20(r1)145; PPC32-NEXT:    addi r1, r1, 16146; PPC32-NEXT:    mtlr r0147; PPC32-NEXT:    blr148;149; P8-LABEL: loadd:150; P8:       # %bb.0: # %entry151; P8-NEXT:    mflr r0152; P8-NEXT:    stdu r1, -32(r1)153; P8-NEXT:    std r0, 48(r1)154; P8-NEXT:    lhz r3, 2(r3)155; P8-NEXT:    bl __extendhfsf2156; P8-NEXT:    nop157; P8-NEXT:    addi r1, r1, 32158; P8-NEXT:    ld r0, 16(r1)159; P8-NEXT:    mtlr r0160; P8-NEXT:    blr161;162; P9-LABEL: loadd:163; P9:       # %bb.0: # %entry164; P9-NEXT:    addi r3, r3, 2165; P9-NEXT:    lxsihzx f0, 0, r3166; P9-NEXT:    xscvhpdp f1, f0167; P9-NEXT:    blr168;169; SOFT-LABEL: loadd:170; SOFT:       # %bb.0: # %entry171; SOFT-NEXT:    mflr r0172; SOFT-NEXT:    stdu r1, -32(r1)173; SOFT-NEXT:    std r0, 48(r1)174; SOFT-NEXT:    lhz r3, 2(r3)175; SOFT-NEXT:    bl __extendhfsf2176; SOFT-NEXT:    nop177; SOFT-NEXT:    bl __extendsfdf2178; SOFT-NEXT:    nop179; SOFT-NEXT:    addi r1, r1, 32180; SOFT-NEXT:    ld r0, 16(r1)181; SOFT-NEXT:    mtlr r0182; SOFT-NEXT:    blr183;184; BE-LABEL: loadd:185; BE:       # %bb.0: # %entry186; BE-NEXT:    mflr r0187; BE-NEXT:    stdu r1, -112(r1)188; BE-NEXT:    std r0, 128(r1)189; BE-NEXT:    lhz r3, 2(r3)190; BE-NEXT:    bl __extendhfsf2191; BE-NEXT:    nop192; BE-NEXT:    addi r1, r1, 112193; BE-NEXT:    ld r0, 16(r1)194; BE-NEXT:    mtlr r0195; BE-NEXT:    blr196entry:197  %arrayidx = getelementptr inbounds i16, ptr %a, i64 1198  %0 = load i16, ptr %arrayidx, align 2199  %1 = tail call double @llvm.convert.from.fp16.f64(i16 %0)200  ret double %1201}202 203declare double @llvm.convert.from.fp16.f64(i16)204 205define dso_local float @loadf(ptr nocapture readonly %a) local_unnamed_addr nounwind {206; PPC32-LABEL: loadf:207; PPC32:       # %bb.0: # %entry208; PPC32-NEXT:    mflr r0209; PPC32-NEXT:    stwu r1, -16(r1)210; PPC32-NEXT:    stw r0, 20(r1)211; PPC32-NEXT:    lhz r3, 2(r3)212; PPC32-NEXT:    bl __extendhfsf2213; PPC32-NEXT:    lwz r0, 20(r1)214; PPC32-NEXT:    addi r1, r1, 16215; PPC32-NEXT:    mtlr r0216; PPC32-NEXT:    blr217;218; P8-LABEL: loadf:219; P8:       # %bb.0: # %entry220; P8-NEXT:    mflr r0221; P8-NEXT:    stdu r1, -32(r1)222; P8-NEXT:    std r0, 48(r1)223; P8-NEXT:    lhz r3, 2(r3)224; P8-NEXT:    bl __extendhfsf2225; P8-NEXT:    nop226; P8-NEXT:    addi r1, r1, 32227; P8-NEXT:    ld r0, 16(r1)228; P8-NEXT:    mtlr r0229; P8-NEXT:    blr230;231; P9-LABEL: loadf:232; P9:       # %bb.0: # %entry233; P9-NEXT:    addi r3, r3, 2234; P9-NEXT:    lxsihzx f0, 0, r3235; P9-NEXT:    xscvhpdp f1, f0236; P9-NEXT:    blr237;238; SOFT-LABEL: loadf:239; SOFT:       # %bb.0: # %entry240; SOFT-NEXT:    mflr r0241; SOFT-NEXT:    stdu r1, -32(r1)242; SOFT-NEXT:    std r0, 48(r1)243; SOFT-NEXT:    lhz r3, 2(r3)244; SOFT-NEXT:    bl __extendhfsf2245; SOFT-NEXT:    nop246; SOFT-NEXT:    addi r1, r1, 32247; SOFT-NEXT:    ld r0, 16(r1)248; SOFT-NEXT:    mtlr r0249; SOFT-NEXT:    blr250;251; BE-LABEL: loadf:252; BE:       # %bb.0: # %entry253; BE-NEXT:    mflr r0254; BE-NEXT:    stdu r1, -112(r1)255; BE-NEXT:    std r0, 128(r1)256; BE-NEXT:    lhz r3, 2(r3)257; BE-NEXT:    bl __extendhfsf2258; BE-NEXT:    nop259; BE-NEXT:    addi r1, r1, 112260; BE-NEXT:    ld r0, 16(r1)261; BE-NEXT:    mtlr r0262; BE-NEXT:    blr263entry:264  %arrayidx = getelementptr inbounds i16, ptr %a, i64 1265  %0 = load i16, ptr %arrayidx, align 2266  %1 = tail call float @llvm.convert.from.fp16.f32(i16 %0)267  ret float %1268}269 270declare float @llvm.convert.from.fp16.f32(i16)271 272define dso_local void @stored(ptr nocapture %a, double %b) local_unnamed_addr nounwind {273; PPC32-LABEL: stored:274; PPC32:       # %bb.0: # %entry275; PPC32-NEXT:    mflr r0276; PPC32-NEXT:    stwu r1, -16(r1)277; PPC32-NEXT:    stw r0, 20(r1)278; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill279; PPC32-NEXT:    mr r30, r3280; PPC32-NEXT:    bl __truncdfhf2281; PPC32-NEXT:    sth r3, 0(r30)282; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload283; PPC32-NEXT:    lwz r0, 20(r1)284; PPC32-NEXT:    addi r1, r1, 16285; PPC32-NEXT:    mtlr r0286; PPC32-NEXT:    blr287;288; P8-LABEL: stored:289; P8:       # %bb.0: # %entry290; P8-NEXT:    mflr r0291; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill292; P8-NEXT:    stdu r1, -48(r1)293; P8-NEXT:    std r0, 64(r1)294; P8-NEXT:    mr r30, r3295; P8-NEXT:    bl __truncdfhf2296; P8-NEXT:    nop297; P8-NEXT:    sth r3, 0(r30)298; P8-NEXT:    addi r1, r1, 48299; P8-NEXT:    ld r0, 16(r1)300; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload301; P8-NEXT:    mtlr r0302; P8-NEXT:    blr303;304; P9-LABEL: stored:305; P9:       # %bb.0: # %entry306; P9-NEXT:    xscvdphp f0, f1307; P9-NEXT:    stxsihx f0, 0, r3308; P9-NEXT:    blr309;310; SOFT-LABEL: stored:311; SOFT:       # %bb.0: # %entry312; SOFT-NEXT:    mflr r0313; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill314; SOFT-NEXT:    stdu r1, -48(r1)315; SOFT-NEXT:    mr r30, r3316; SOFT-NEXT:    mr r3, r4317; SOFT-NEXT:    std r0, 64(r1)318; SOFT-NEXT:    bl __truncdfhf2319; SOFT-NEXT:    nop320; SOFT-NEXT:    clrldi r3, r3, 48321; SOFT-NEXT:    bl __extendhfsf2322; SOFT-NEXT:    nop323; SOFT-NEXT:    bl __truncsfhf2324; SOFT-NEXT:    nop325; SOFT-NEXT:    sth r3, 0(r30)326; SOFT-NEXT:    addi r1, r1, 48327; SOFT-NEXT:    ld r0, 16(r1)328; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload329; SOFT-NEXT:    mtlr r0330; SOFT-NEXT:    blr331;332; BE-LABEL: stored:333; BE:       # %bb.0: # %entry334; BE-NEXT:    mflr r0335; BE-NEXT:    stdu r1, -128(r1)336; BE-NEXT:    std r0, 144(r1)337; BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill338; BE-NEXT:    mr r30, r3339; BE-NEXT:    bl __truncdfhf2340; BE-NEXT:    nop341; BE-NEXT:    sth r3, 0(r30)342; BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload343; BE-NEXT:    addi r1, r1, 128344; BE-NEXT:    ld r0, 16(r1)345; BE-NEXT:    mtlr r0346; BE-NEXT:    blr347entry:348  %0 = tail call i16 @llvm.convert.to.fp16.f64(double %b)349  store i16 %0, ptr %a, align 2350  ret void351}352 353declare i16 @llvm.convert.to.fp16.f64(double)354 355define dso_local void @storef(ptr nocapture %a, float %b) local_unnamed_addr nounwind {356; PPC32-LABEL: storef:357; PPC32:       # %bb.0: # %entry358; PPC32-NEXT:    mflr r0359; PPC32-NEXT:    stwu r1, -16(r1)360; PPC32-NEXT:    stw r0, 20(r1)361; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill362; PPC32-NEXT:    mr r30, r3363; PPC32-NEXT:    bl __truncsfhf2364; PPC32-NEXT:    sth r3, 0(r30)365; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload366; PPC32-NEXT:    lwz r0, 20(r1)367; PPC32-NEXT:    addi r1, r1, 16368; PPC32-NEXT:    mtlr r0369; PPC32-NEXT:    blr370;371; P8-LABEL: storef:372; P8:       # %bb.0: # %entry373; P8-NEXT:    mflr r0374; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill375; P8-NEXT:    stdu r1, -48(r1)376; P8-NEXT:    std r0, 64(r1)377; P8-NEXT:    mr r30, r3378; P8-NEXT:    bl __truncsfhf2379; P8-NEXT:    nop380; P8-NEXT:    sth r3, 0(r30)381; P8-NEXT:    addi r1, r1, 48382; P8-NEXT:    ld r0, 16(r1)383; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload384; P8-NEXT:    mtlr r0385; P8-NEXT:    blr386;387; P9-LABEL: storef:388; P9:       # %bb.0: # %entry389; P9-NEXT:    xscvdphp f0, f1390; P9-NEXT:    stxsihx f0, 0, r3391; P9-NEXT:    blr392;393; SOFT-LABEL: storef:394; SOFT:       # %bb.0: # %entry395; SOFT-NEXT:    mflr r0396; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill397; SOFT-NEXT:    stdu r1, -48(r1)398; SOFT-NEXT:    mr r30, r3399; SOFT-NEXT:    clrldi r3, r4, 32400; SOFT-NEXT:    std r0, 64(r1)401; SOFT-NEXT:    bl __truncsfhf2402; SOFT-NEXT:    nop403; SOFT-NEXT:    clrldi r3, r3, 48404; SOFT-NEXT:    bl __extendhfsf2405; SOFT-NEXT:    nop406; SOFT-NEXT:    bl __truncsfhf2407; SOFT-NEXT:    nop408; SOFT-NEXT:    sth r3, 0(r30)409; SOFT-NEXT:    addi r1, r1, 48410; SOFT-NEXT:    ld r0, 16(r1)411; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload412; SOFT-NEXT:    mtlr r0413; SOFT-NEXT:    blr414;415; BE-LABEL: storef:416; BE:       # %bb.0: # %entry417; BE-NEXT:    mflr r0418; BE-NEXT:    stdu r1, -128(r1)419; BE-NEXT:    std r0, 144(r1)420; BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill421; BE-NEXT:    mr r30, r3422; BE-NEXT:    bl __truncsfhf2423; BE-NEXT:    nop424; BE-NEXT:    sth r3, 0(r30)425; BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload426; BE-NEXT:    addi r1, r1, 128427; BE-NEXT:    ld r0, 16(r1)428; BE-NEXT:    mtlr r0429; BE-NEXT:    blr430entry:431  %0 = tail call i16 @llvm.convert.to.fp16.f32(float %b)432  store i16 %0, ptr %a, align 2433  ret void434}435 436declare i16 @llvm.convert.to.fp16.f32(float)437define void @test_load_store(ptr %in, ptr %out) nounwind {438; PPC32-LABEL: test_load_store:439; PPC32:       # %bb.0:440; PPC32-NEXT:    lhz r3, 0(r3)441; PPC32-NEXT:    sth r3, 0(r4)442; PPC32-NEXT:    blr443;444; CHECK-LABEL: test_load_store:445; CHECK:       # %bb.0:446; CHECK-NEXT:    lhz r3, 0(r3)447; CHECK-NEXT:    sth r3, 0(r4)448; CHECK-NEXT:    blr449;450; SOFT-LABEL: test_load_store:451; SOFT:       # %bb.0:452; SOFT-NEXT:    mflr r0453; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill454; SOFT-NEXT:    stdu r1, -48(r1)455; SOFT-NEXT:    std r0, 64(r1)456; SOFT-NEXT:    mr r30, r4457; SOFT-NEXT:    lhz r3, 0(r3)458; SOFT-NEXT:    bl __extendhfsf2459; SOFT-NEXT:    nop460; SOFT-NEXT:    bl __truncsfhf2461; SOFT-NEXT:    nop462; SOFT-NEXT:    sth r3, 0(r30)463; SOFT-NEXT:    addi r1, r1, 48464; SOFT-NEXT:    ld r0, 16(r1)465; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload466; SOFT-NEXT:    mtlr r0467; SOFT-NEXT:    blr468;469; BE-LABEL: test_load_store:470; BE:       # %bb.0:471; BE-NEXT:    lhz r3, 0(r3)472; BE-NEXT:    sth r3, 0(r4)473; BE-NEXT:    blr474  %val = load half, ptr %in475  store half %val, ptr %out476  ret void477}478define i16 @test_bitcast_from_half(ptr %addr) nounwind {479; PPC32-LABEL: test_bitcast_from_half:480; PPC32:       # %bb.0:481; PPC32-NEXT:    lhz r3, 0(r3)482; PPC32-NEXT:    blr483;484; CHECK-LABEL: test_bitcast_from_half:485; CHECK:       # %bb.0:486; CHECK-NEXT:    lhz r3, 0(r3)487; CHECK-NEXT:    blr488;489; SOFT-LABEL: test_bitcast_from_half:490; SOFT:       # %bb.0:491; SOFT-NEXT:    lhz r3, 0(r3)492; SOFT-NEXT:    blr493;494; BE-LABEL: test_bitcast_from_half:495; BE:       # %bb.0:496; BE-NEXT:    lhz r3, 0(r3)497; BE-NEXT:    blr498  %val = load half, ptr %addr499  %val_int = bitcast half %val to i16500  ret i16 %val_int501}502define void @test_bitcast_to_half(ptr %addr, i16 %in) nounwind {503; PPC32-LABEL: test_bitcast_to_half:504; PPC32:       # %bb.0:505; PPC32-NEXT:    sth r4, 0(r3)506; PPC32-NEXT:    blr507;508; CHECK-LABEL: test_bitcast_to_half:509; CHECK:       # %bb.0:510; CHECK-NEXT:    sth r4, 0(r3)511; CHECK-NEXT:    blr512;513; SOFT-LABEL: test_bitcast_to_half:514; SOFT:       # %bb.0:515; SOFT-NEXT:    sth r4, 0(r3)516; SOFT-NEXT:    blr517;518; BE-LABEL: test_bitcast_to_half:519; BE:       # %bb.0:520; BE-NEXT:    sth r4, 0(r3)521; BE-NEXT:    blr522  %val_fp = bitcast i16 %in to half523  store half %val_fp, ptr %addr524  ret void525}526 527 528; Checks for https://github.com/llvm/llvm-project/issues/97981529define half @from_bits(i16 %x) nounwind {530; PPC32-LABEL: from_bits:531; PPC32:       # %bb.0:532; PPC32-NEXT:    mflr r0533; PPC32-NEXT:    stwu r1, -16(r1)534; PPC32-NEXT:    clrlwi r3, r3, 16535; PPC32-NEXT:    stw r0, 20(r1)536; PPC32-NEXT:    bl __extendhfsf2537; PPC32-NEXT:    lwz r0, 20(r1)538; PPC32-NEXT:    addi r1, r1, 16539; PPC32-NEXT:    mtlr r0540; PPC32-NEXT:    blr541;542; P8-LABEL: from_bits:543; P8:       # %bb.0:544; P8-NEXT:    mflr r0545; P8-NEXT:    stdu r1, -32(r1)546; P8-NEXT:    clrldi r3, r3, 48547; P8-NEXT:    std r0, 48(r1)548; P8-NEXT:    bl __extendhfsf2549; P8-NEXT:    nop550; P8-NEXT:    addi r1, r1, 32551; P8-NEXT:    ld r0, 16(r1)552; P8-NEXT:    mtlr r0553; P8-NEXT:    blr554;555; P9-LABEL: from_bits:556; P9:       # %bb.0:557; P9-NEXT:    clrlwi r3, r3, 16558; P9-NEXT:    mtfprwz f0, r3559; P9-NEXT:    xscvhpdp f1, f0560; P9-NEXT:    blr561;562; SOFT-LABEL: from_bits:563; SOFT:       # %bb.0:564; SOFT-NEXT:    blr565;566; BE-LABEL: from_bits:567; BE:       # %bb.0:568; BE-NEXT:    mflr r0569; BE-NEXT:    stdu r1, -112(r1)570; BE-NEXT:    clrldi r3, r3, 48571; BE-NEXT:    std r0, 128(r1)572; BE-NEXT:    bl __extendhfsf2573; BE-NEXT:    nop574; BE-NEXT:    addi r1, r1, 112575; BE-NEXT:    ld r0, 16(r1)576; BE-NEXT:    mtlr r0577; BE-NEXT:    blr578  %res = bitcast i16 %x to half579  ret half %res580}581 582define i16 @to_bits(half %x) nounwind {583; PPC32-LABEL: to_bits:584; PPC32:       # %bb.0:585; PPC32-NEXT:    mflr r0586; PPC32-NEXT:    stwu r1, -16(r1)587; PPC32-NEXT:    stw r0, 20(r1)588; PPC32-NEXT:    bl __truncsfhf2589; PPC32-NEXT:    clrlwi r3, r3, 16590; PPC32-NEXT:    lwz r0, 20(r1)591; PPC32-NEXT:    addi r1, r1, 16592; PPC32-NEXT:    mtlr r0593; PPC32-NEXT:    blr594;595; P8-LABEL: to_bits:596; P8:       # %bb.0:597; P8-NEXT:    mflr r0598; P8-NEXT:    stdu r1, -32(r1)599; P8-NEXT:    std r0, 48(r1)600; P8-NEXT:    bl __truncsfhf2601; P8-NEXT:    nop602; P8-NEXT:    clrldi r3, r3, 48603; P8-NEXT:    addi r1, r1, 32604; P8-NEXT:    ld r0, 16(r1)605; P8-NEXT:    mtlr r0606; P8-NEXT:    blr607;608; P9-LABEL: to_bits:609; P9:       # %bb.0:610; P9-NEXT:    xscvdphp f0, f1611; P9-NEXT:    mffprwz r3, f0612; P9-NEXT:    clrlwi r3, r3, 16613; P9-NEXT:    blr614;615; SOFT-LABEL: to_bits:616; SOFT:       # %bb.0:617; SOFT-NEXT:    blr618;619; BE-LABEL: to_bits:620; BE:       # %bb.0:621; BE-NEXT:    mflr r0622; BE-NEXT:    stdu r1, -112(r1)623; BE-NEXT:    std r0, 128(r1)624; BE-NEXT:    bl __truncsfhf2625; BE-NEXT:    nop626; BE-NEXT:    clrldi r3, r3, 48627; BE-NEXT:    addi r1, r1, 112628; BE-NEXT:    ld r0, 16(r1)629; BE-NEXT:    mtlr r0630; BE-NEXT:    blr631    %res = bitcast half %x to i16632    ret i16 %res633}634 635define float @test_extend32(ptr %addr) nounwind {636; PPC32-LABEL: test_extend32:637; PPC32:       # %bb.0:638; PPC32-NEXT:    mflr r0639; PPC32-NEXT:    stwu r1, -16(r1)640; PPC32-NEXT:    stw r0, 20(r1)641; PPC32-NEXT:    lhz r3, 0(r3)642; PPC32-NEXT:    bl __extendhfsf2643; PPC32-NEXT:    lwz r0, 20(r1)644; PPC32-NEXT:    addi r1, r1, 16645; PPC32-NEXT:    mtlr r0646; PPC32-NEXT:    blr647;648; P8-LABEL: test_extend32:649; P8:       # %bb.0:650; P8-NEXT:    mflr r0651; P8-NEXT:    stdu r1, -32(r1)652; P8-NEXT:    std r0, 48(r1)653; P8-NEXT:    lhz r3, 0(r3)654; P8-NEXT:    bl __extendhfsf2655; P8-NEXT:    nop656; P8-NEXT:    addi r1, r1, 32657; P8-NEXT:    ld r0, 16(r1)658; P8-NEXT:    mtlr r0659; P8-NEXT:    blr660;661; P9-LABEL: test_extend32:662; P9:       # %bb.0:663; P9-NEXT:    lxsihzx f0, 0, r3664; P9-NEXT:    xscvhpdp f1, f0665; P9-NEXT:    blr666;667; SOFT-LABEL: test_extend32:668; SOFT:       # %bb.0:669; SOFT-NEXT:    mflr r0670; SOFT-NEXT:    stdu r1, -32(r1)671; SOFT-NEXT:    std r0, 48(r1)672; SOFT-NEXT:    lhz r3, 0(r3)673; SOFT-NEXT:    bl __extendhfsf2674; SOFT-NEXT:    nop675; SOFT-NEXT:    addi r1, r1, 32676; SOFT-NEXT:    ld r0, 16(r1)677; SOFT-NEXT:    mtlr r0678; SOFT-NEXT:    blr679;680; BE-LABEL: test_extend32:681; BE:       # %bb.0:682; BE-NEXT:    mflr r0683; BE-NEXT:    stdu r1, -112(r1)684; BE-NEXT:    std r0, 128(r1)685; BE-NEXT:    lhz r3, 0(r3)686; BE-NEXT:    bl __extendhfsf2687; BE-NEXT:    nop688; BE-NEXT:    addi r1, r1, 112689; BE-NEXT:    ld r0, 16(r1)690; BE-NEXT:    mtlr r0691; BE-NEXT:    blr692  %val16 = load half, ptr %addr693  %val32 = fpext half %val16 to float694  ret float %val32695}696define double @test_extend64(ptr %addr) nounwind {697; PPC32-LABEL: test_extend64:698; PPC32:       # %bb.0:699; PPC32-NEXT:    mflr r0700; PPC32-NEXT:    stwu r1, -16(r1)701; PPC32-NEXT:    stw r0, 20(r1)702; PPC32-NEXT:    lhz r3, 0(r3)703; PPC32-NEXT:    bl __extendhfsf2704; PPC32-NEXT:    lwz r0, 20(r1)705; PPC32-NEXT:    addi r1, r1, 16706; PPC32-NEXT:    mtlr r0707; PPC32-NEXT:    blr708;709; P8-LABEL: test_extend64:710; P8:       # %bb.0:711; P8-NEXT:    mflr r0712; P8-NEXT:    stdu r1, -32(r1)713; P8-NEXT:    std r0, 48(r1)714; P8-NEXT:    lhz r3, 0(r3)715; P8-NEXT:    bl __extendhfsf2716; P8-NEXT:    nop717; P8-NEXT:    addi r1, r1, 32718; P8-NEXT:    ld r0, 16(r1)719; P8-NEXT:    mtlr r0720; P8-NEXT:    blr721;722; P9-LABEL: test_extend64:723; P9:       # %bb.0:724; P9-NEXT:    lxsihzx f0, 0, r3725; P9-NEXT:    xscvhpdp f1, f0726; P9-NEXT:    blr727;728; SOFT-LABEL: test_extend64:729; SOFT:       # %bb.0:730; SOFT-NEXT:    mflr r0731; SOFT-NEXT:    stdu r1, -32(r1)732; SOFT-NEXT:    std r0, 48(r1)733; SOFT-NEXT:    lhz r3, 0(r3)734; SOFT-NEXT:    bl __extendhfsf2735; SOFT-NEXT:    nop736; SOFT-NEXT:    bl __extendsfdf2737; SOFT-NEXT:    nop738; SOFT-NEXT:    addi r1, r1, 32739; SOFT-NEXT:    ld r0, 16(r1)740; SOFT-NEXT:    mtlr r0741; SOFT-NEXT:    blr742;743; BE-LABEL: test_extend64:744; BE:       # %bb.0:745; BE-NEXT:    mflr r0746; BE-NEXT:    stdu r1, -112(r1)747; BE-NEXT:    std r0, 128(r1)748; BE-NEXT:    lhz r3, 0(r3)749; BE-NEXT:    bl __extendhfsf2750; BE-NEXT:    nop751; BE-NEXT:    addi r1, r1, 112752; BE-NEXT:    ld r0, 16(r1)753; BE-NEXT:    mtlr r0754; BE-NEXT:    blr755  %val16 = load half, ptr %addr756  %val32 = fpext half %val16 to double757  ret double %val32758}759define void @test_trunc32(float %in, ptr %addr) nounwind {760; PPC32-LABEL: test_trunc32:761; PPC32:       # %bb.0:762; PPC32-NEXT:    mflr r0763; PPC32-NEXT:    stwu r1, -16(r1)764; PPC32-NEXT:    stw r0, 20(r1)765; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill766; PPC32-NEXT:    mr r30, r3767; PPC32-NEXT:    bl __truncsfhf2768; PPC32-NEXT:    sth r3, 0(r30)769; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload770; PPC32-NEXT:    lwz r0, 20(r1)771; PPC32-NEXT:    addi r1, r1, 16772; PPC32-NEXT:    mtlr r0773; PPC32-NEXT:    blr774;775; P8-LABEL: test_trunc32:776; P8:       # %bb.0:777; P8-NEXT:    mflr r0778; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill779; P8-NEXT:    stdu r1, -48(r1)780; P8-NEXT:    std r0, 64(r1)781; P8-NEXT:    mr r30, r4782; P8-NEXT:    bl __truncsfhf2783; P8-NEXT:    nop784; P8-NEXT:    sth r3, 0(r30)785; P8-NEXT:    addi r1, r1, 48786; P8-NEXT:    ld r0, 16(r1)787; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload788; P8-NEXT:    mtlr r0789; P8-NEXT:    blr790;791; P9-LABEL: test_trunc32:792; P9:       # %bb.0:793; P9-NEXT:    xscvdphp f0, f1794; P9-NEXT:    stxsihx f0, 0, r4795; P9-NEXT:    blr796;797; SOFT-LABEL: test_trunc32:798; SOFT:       # %bb.0:799; SOFT-NEXT:    mflr r0800; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill801; SOFT-NEXT:    stdu r1, -48(r1)802; SOFT-NEXT:    clrldi r3, r3, 32803; SOFT-NEXT:    std r0, 64(r1)804; SOFT-NEXT:    mr r30, r4805; SOFT-NEXT:    bl __truncsfhf2806; SOFT-NEXT:    nop807; SOFT-NEXT:    clrldi r3, r3, 48808; SOFT-NEXT:    bl __extendhfsf2809; SOFT-NEXT:    nop810; SOFT-NEXT:    bl __truncsfhf2811; SOFT-NEXT:    nop812; SOFT-NEXT:    sth r3, 0(r30)813; SOFT-NEXT:    addi r1, r1, 48814; SOFT-NEXT:    ld r0, 16(r1)815; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload816; SOFT-NEXT:    mtlr r0817; SOFT-NEXT:    blr818;819; BE-LABEL: test_trunc32:820; BE:       # %bb.0:821; BE-NEXT:    mflr r0822; BE-NEXT:    stdu r1, -128(r1)823; BE-NEXT:    std r0, 144(r1)824; BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill825; BE-NEXT:    mr r30, r4826; BE-NEXT:    bl __truncsfhf2827; BE-NEXT:    nop828; BE-NEXT:    sth r3, 0(r30)829; BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload830; BE-NEXT:    addi r1, r1, 128831; BE-NEXT:    ld r0, 16(r1)832; BE-NEXT:    mtlr r0833; BE-NEXT:    blr834  %val16 = fptrunc float %in to half835  store half %val16, ptr %addr836  ret void837}838define void @test_trunc64(double %in, ptr %addr) nounwind {839; PPC32-LABEL: test_trunc64:840; PPC32:       # %bb.0:841; PPC32-NEXT:    mflr r0842; PPC32-NEXT:    stwu r1, -16(r1)843; PPC32-NEXT:    stw r0, 20(r1)844; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill845; PPC32-NEXT:    mr r30, r3846; PPC32-NEXT:    bl __truncdfhf2847; PPC32-NEXT:    sth r3, 0(r30)848; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload849; PPC32-NEXT:    lwz r0, 20(r1)850; PPC32-NEXT:    addi r1, r1, 16851; PPC32-NEXT:    mtlr r0852; PPC32-NEXT:    blr853;854; P8-LABEL: test_trunc64:855; P8:       # %bb.0:856; P8-NEXT:    mflr r0857; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill858; P8-NEXT:    stdu r1, -48(r1)859; P8-NEXT:    std r0, 64(r1)860; P8-NEXT:    mr r30, r4861; P8-NEXT:    bl __truncdfhf2862; P8-NEXT:    nop863; P8-NEXT:    sth r3, 0(r30)864; P8-NEXT:    addi r1, r1, 48865; P8-NEXT:    ld r0, 16(r1)866; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload867; P8-NEXT:    mtlr r0868; P8-NEXT:    blr869;870; P9-LABEL: test_trunc64:871; P9:       # %bb.0:872; P9-NEXT:    xscvdphp f0, f1873; P9-NEXT:    stxsihx f0, 0, r4874; P9-NEXT:    blr875;876; SOFT-LABEL: test_trunc64:877; SOFT:       # %bb.0:878; SOFT-NEXT:    mflr r0879; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill880; SOFT-NEXT:    stdu r1, -48(r1)881; SOFT-NEXT:    std r0, 64(r1)882; SOFT-NEXT:    mr r30, r4883; SOFT-NEXT:    bl __truncdfhf2884; SOFT-NEXT:    nop885; SOFT-NEXT:    clrldi r3, r3, 48886; SOFT-NEXT:    bl __extendhfsf2887; SOFT-NEXT:    nop888; SOFT-NEXT:    bl __truncsfhf2889; SOFT-NEXT:    nop890; SOFT-NEXT:    sth r3, 0(r30)891; SOFT-NEXT:    addi r1, r1, 48892; SOFT-NEXT:    ld r0, 16(r1)893; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload894; SOFT-NEXT:    mtlr r0895; SOFT-NEXT:    blr896;897; BE-LABEL: test_trunc64:898; BE:       # %bb.0:899; BE-NEXT:    mflr r0900; BE-NEXT:    stdu r1, -128(r1)901; BE-NEXT:    std r0, 144(r1)902; BE-NEXT:    std r30, 112(r1) # 8-byte Folded Spill903; BE-NEXT:    mr r30, r4904; BE-NEXT:    bl __truncdfhf2905; BE-NEXT:    nop906; BE-NEXT:    sth r3, 0(r30)907; BE-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload908; BE-NEXT:    addi r1, r1, 128909; BE-NEXT:    ld r0, 16(r1)910; BE-NEXT:    mtlr r0911; BE-NEXT:    blr912  %val16 = fptrunc double %in to half913  store half %val16, ptr %addr914  ret void915}916define i64 @test_fptosi_i64(ptr %p) nounwind {917; PPC32-LABEL: test_fptosi_i64:918; PPC32:       # %bb.0:919; PPC32-NEXT:    mflr r0920; PPC32-NEXT:    stwu r1, -16(r1)921; PPC32-NEXT:    stw r0, 20(r1)922; PPC32-NEXT:    lhz r3, 0(r3)923; PPC32-NEXT:    bl __extendhfsf2924; PPC32-NEXT:    bl __fixsfdi925; PPC32-NEXT:    lwz r0, 20(r1)926; PPC32-NEXT:    addi r1, r1, 16927; PPC32-NEXT:    mtlr r0928; PPC32-NEXT:    blr929;930; P8-LABEL: test_fptosi_i64:931; P8:       # %bb.0:932; P8-NEXT:    mflr r0933; P8-NEXT:    stdu r1, -32(r1)934; P8-NEXT:    std r0, 48(r1)935; P8-NEXT:    lhz r3, 0(r3)936; P8-NEXT:    bl __extendhfsf2937; P8-NEXT:    nop938; P8-NEXT:    xscvdpsxds f0, f1939; P8-NEXT:    mffprd r3, f0940; P8-NEXT:    addi r1, r1, 32941; P8-NEXT:    ld r0, 16(r1)942; P8-NEXT:    mtlr r0943; P8-NEXT:    blr944;945; P9-LABEL: test_fptosi_i64:946; P9:       # %bb.0:947; P9-NEXT:    lhz r3, 0(r3)948; P9-NEXT:    mtfprwz f0, r3949; P9-NEXT:    xscvhpdp f0, f0950; P9-NEXT:    xscvdpsxds f0, f0951; P9-NEXT:    mffprd r3, f0952; P9-NEXT:    blr953;954; SOFT-LABEL: test_fptosi_i64:955; SOFT:       # %bb.0:956; SOFT-NEXT:    mflr r0957; SOFT-NEXT:    stdu r1, -32(r1)958; SOFT-NEXT:    std r0, 48(r1)959; SOFT-NEXT:    lhz r3, 0(r3)960; SOFT-NEXT:    bl __extendhfsf2961; SOFT-NEXT:    nop962; SOFT-NEXT:    bl __fixsfdi963; SOFT-NEXT:    nop964; SOFT-NEXT:    addi r1, r1, 32965; SOFT-NEXT:    ld r0, 16(r1)966; SOFT-NEXT:    mtlr r0967; SOFT-NEXT:    blr968;969; BE-LABEL: test_fptosi_i64:970; BE:       # %bb.0:971; BE-NEXT:    mflr r0972; BE-NEXT:    stdu r1, -128(r1)973; BE-NEXT:    std r0, 144(r1)974; BE-NEXT:    lhz r3, 0(r3)975; BE-NEXT:    bl __extendhfsf2976; BE-NEXT:    nop977; BE-NEXT:    fctidz f0, f1978; BE-NEXT:    stfd f0, 120(r1)979; BE-NEXT:    ld r3, 120(r1)980; BE-NEXT:    addi r1, r1, 128981; BE-NEXT:    ld r0, 16(r1)982; BE-NEXT:    mtlr r0983; BE-NEXT:    blr984  %a = load half, ptr %p, align 2985  %r = fptosi half %a to i64986  ret i64 %r987}988define void @test_sitofp_i64(i64 %a, ptr %p) nounwind {989; PPC32-LABEL: test_sitofp_i64:990; PPC32:       # %bb.0:991; PPC32-NEXT:    mflr r0992; PPC32-NEXT:    stwu r1, -16(r1)993; PPC32-NEXT:    stw r0, 20(r1)994; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill995; PPC32-NEXT:    mr r30, r5996; PPC32-NEXT:    bl __floatdisf997; PPC32-NEXT:    bl __truncsfhf2998; PPC32-NEXT:    sth r3, 0(r30)999; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload1000; PPC32-NEXT:    lwz r0, 20(r1)1001; PPC32-NEXT:    addi r1, r1, 161002; PPC32-NEXT:    mtlr r01003; PPC32-NEXT:    blr1004;1005; P8-LABEL: test_sitofp_i64:1006; P8:       # %bb.0:1007; P8-NEXT:    mflr r01008; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1009; P8-NEXT:    stdu r1, -48(r1)1010; P8-NEXT:    mtfprd f0, r31011; P8-NEXT:    std r0, 64(r1)1012; P8-NEXT:    mr r30, r41013; P8-NEXT:    xscvsxdsp f1, f01014; P8-NEXT:    bl __truncsfhf21015; P8-NEXT:    nop1016; P8-NEXT:    sth r3, 0(r30)1017; P8-NEXT:    addi r1, r1, 481018; P8-NEXT:    ld r0, 16(r1)1019; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1020; P8-NEXT:    mtlr r01021; P8-NEXT:    blr1022;1023; P9-LABEL: test_sitofp_i64:1024; P9:       # %bb.0:1025; P9-NEXT:    mtfprd f0, r31026; P9-NEXT:    xscvsxdsp f0, f01027; P9-NEXT:    xscvdphp f0, f01028; P9-NEXT:    mffprwz r3, f01029; P9-NEXT:    sth r3, 0(r4)1030; P9-NEXT:    blr1031;1032; SOFT-LABEL: test_sitofp_i64:1033; SOFT:       # %bb.0:1034; SOFT-NEXT:    mflr r01035; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1036; SOFT-NEXT:    stdu r1, -48(r1)1037; SOFT-NEXT:    std r0, 64(r1)1038; SOFT-NEXT:    mr r30, r41039; SOFT-NEXT:    bl __floatdisf1040; SOFT-NEXT:    nop1041; SOFT-NEXT:    clrldi r3, r3, 321042; SOFT-NEXT:    bl __truncsfhf21043; SOFT-NEXT:    nop1044; SOFT-NEXT:    clrldi r3, r3, 481045; SOFT-NEXT:    bl __extendhfsf21046; SOFT-NEXT:    nop1047; SOFT-NEXT:    bl __truncsfhf21048; SOFT-NEXT:    nop1049; SOFT-NEXT:    sth r3, 0(r30)1050; SOFT-NEXT:    addi r1, r1, 481051; SOFT-NEXT:    ld r0, 16(r1)1052; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1053; SOFT-NEXT:    mtlr r01054; SOFT-NEXT:    blr1055;1056; BE-LABEL: test_sitofp_i64:1057; BE:       # %bb.0:1058; BE-NEXT:    mflr r01059; BE-NEXT:    stdu r1, -144(r1)1060; BE-NEXT:    sradi r5, r3, 531061; BE-NEXT:    std r0, 160(r1)1062; BE-NEXT:    addi r5, r5, 11063; BE-NEXT:    cmpldi r5, 11064; BE-NEXT:    std r30, 128(r1) # 8-byte Folded Spill1065; BE-NEXT:    mr r30, r41066; BE-NEXT:    ble cr0, .LBB16_21067; BE-NEXT:  # %bb.1:1068; BE-NEXT:    clrldi r4, r3, 531069; BE-NEXT:    addi r4, r4, 20471070; BE-NEXT:    or r3, r4, r31071; BE-NEXT:    rldicr r3, r3, 0, 521072; BE-NEXT:  .LBB16_2:1073; BE-NEXT:    std r3, 120(r1)1074; BE-NEXT:    lfd f0, 120(r1)1075; BE-NEXT:    fcfid f0, f01076; BE-NEXT:    frsp f1, f01077; BE-NEXT:    bl __truncsfhf21078; BE-NEXT:    nop1079; BE-NEXT:    sth r3, 0(r30)1080; BE-NEXT:    ld r30, 128(r1) # 8-byte Folded Reload1081; BE-NEXT:    addi r1, r1, 1441082; BE-NEXT:    ld r0, 16(r1)1083; BE-NEXT:    mtlr r01084; BE-NEXT:    blr1085  %r = sitofp i64 %a to half1086  store half %r, ptr %p1087  ret void1088}1089define i64 @test_fptoui_i64(ptr %p) nounwind {1090; PPC32-LABEL: test_fptoui_i64:1091; PPC32:       # %bb.0:1092; PPC32-NEXT:    mflr r01093; PPC32-NEXT:    stwu r1, -16(r1)1094; PPC32-NEXT:    stw r0, 20(r1)1095; PPC32-NEXT:    lhz r3, 0(r3)1096; PPC32-NEXT:    bl __extendhfsf21097; PPC32-NEXT:    bl __fixunssfdi1098; PPC32-NEXT:    lwz r0, 20(r1)1099; PPC32-NEXT:    addi r1, r1, 161100; PPC32-NEXT:    mtlr r01101; PPC32-NEXT:    blr1102;1103; P8-LABEL: test_fptoui_i64:1104; P8:       # %bb.0:1105; P8-NEXT:    mflr r01106; P8-NEXT:    stdu r1, -32(r1)1107; P8-NEXT:    std r0, 48(r1)1108; P8-NEXT:    lhz r3, 0(r3)1109; P8-NEXT:    bl __extendhfsf21110; P8-NEXT:    nop1111; P8-NEXT:    xscvdpuxds f0, f11112; P8-NEXT:    mffprd r3, f01113; P8-NEXT:    addi r1, r1, 321114; P8-NEXT:    ld r0, 16(r1)1115; P8-NEXT:    mtlr r01116; P8-NEXT:    blr1117;1118; P9-LABEL: test_fptoui_i64:1119; P9:       # %bb.0:1120; P9-NEXT:    lhz r3, 0(r3)1121; P9-NEXT:    mtfprwz f0, r31122; P9-NEXT:    xscvhpdp f0, f01123; P9-NEXT:    xscvdpuxds f0, f01124; P9-NEXT:    mffprd r3, f01125; P9-NEXT:    blr1126;1127; SOFT-LABEL: test_fptoui_i64:1128; SOFT:       # %bb.0:1129; SOFT-NEXT:    mflr r01130; SOFT-NEXT:    stdu r1, -32(r1)1131; SOFT-NEXT:    std r0, 48(r1)1132; SOFT-NEXT:    lhz r3, 0(r3)1133; SOFT-NEXT:    bl __extendhfsf21134; SOFT-NEXT:    nop1135; SOFT-NEXT:    bl __fixunssfdi1136; SOFT-NEXT:    nop1137; SOFT-NEXT:    addi r1, r1, 321138; SOFT-NEXT:    ld r0, 16(r1)1139; SOFT-NEXT:    mtlr r01140; SOFT-NEXT:    blr1141;1142; BE-LABEL: test_fptoui_i64:1143; BE:       # %bb.0:1144; BE-NEXT:    mflr r01145; BE-NEXT:    stdu r1, -128(r1)1146; BE-NEXT:    std r0, 144(r1)1147; BE-NEXT:    lhz r3, 0(r3)1148; BE-NEXT:    bl __extendhfsf21149; BE-NEXT:    nop1150; BE-NEXT:    addis r3, r2, .LCPI17_0@toc@ha1151; BE-NEXT:    lfs f0, .LCPI17_0@toc@l(r3)1152; BE-NEXT:    fsubs f2, f1, f01153; BE-NEXT:    fcmpu cr0, f1, f01154; BE-NEXT:    fctidz f2, f21155; BE-NEXT:    stfd f2, 120(r1)1156; BE-NEXT:    fctidz f2, f11157; BE-NEXT:    stfd f2, 112(r1)1158; BE-NEXT:    blt cr0, .LBB17_21159; BE-NEXT:  # %bb.1:1160; BE-NEXT:    ld r3, 120(r1)1161; BE-NEXT:    li r4, 11162; BE-NEXT:    rldic r4, r4, 63, 01163; BE-NEXT:    xor r3, r3, r41164; BE-NEXT:    b .LBB17_31165; BE-NEXT:  .LBB17_2:1166; BE-NEXT:    ld r3, 112(r1)1167; BE-NEXT:  .LBB17_3:1168; BE-NEXT:    addi r1, r1, 1281169; BE-NEXT:    ld r0, 16(r1)1170; BE-NEXT:    mtlr r01171; BE-NEXT:    blr1172  %a = load half, ptr %p, align 21173  %r = fptoui half %a to i641174  ret i64 %r1175}1176define void @test_uitofp_i64(i64 %a, ptr %p) nounwind {1177; PPC32-LABEL: test_uitofp_i64:1178; PPC32:       # %bb.0:1179; PPC32-NEXT:    mflr r01180; PPC32-NEXT:    stwu r1, -16(r1)1181; PPC32-NEXT:    stw r0, 20(r1)1182; PPC32-NEXT:    stw r30, 8(r1) # 4-byte Folded Spill1183; PPC32-NEXT:    mr r30, r51184; PPC32-NEXT:    bl __floatundisf1185; PPC32-NEXT:    bl __truncsfhf21186; PPC32-NEXT:    sth r3, 0(r30)1187; PPC32-NEXT:    lwz r30, 8(r1) # 4-byte Folded Reload1188; PPC32-NEXT:    lwz r0, 20(r1)1189; PPC32-NEXT:    addi r1, r1, 161190; PPC32-NEXT:    mtlr r01191; PPC32-NEXT:    blr1192;1193; P8-LABEL: test_uitofp_i64:1194; P8:       # %bb.0:1195; P8-NEXT:    mflr r01196; P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1197; P8-NEXT:    stdu r1, -48(r1)1198; P8-NEXT:    mtfprd f0, r31199; P8-NEXT:    std r0, 64(r1)1200; P8-NEXT:    mr r30, r41201; P8-NEXT:    xscvuxdsp f1, f01202; P8-NEXT:    bl __truncsfhf21203; P8-NEXT:    nop1204; P8-NEXT:    sth r3, 0(r30)1205; P8-NEXT:    addi r1, r1, 481206; P8-NEXT:    ld r0, 16(r1)1207; P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1208; P8-NEXT:    mtlr r01209; P8-NEXT:    blr1210;1211; P9-LABEL: test_uitofp_i64:1212; P9:       # %bb.0:1213; P9-NEXT:    mtfprd f0, r31214; P9-NEXT:    xscvuxdsp f0, f01215; P9-NEXT:    xscvdphp f0, f01216; P9-NEXT:    mffprwz r3, f01217; P9-NEXT:    sth r3, 0(r4)1218; P9-NEXT:    blr1219;1220; SOFT-LABEL: test_uitofp_i64:1221; SOFT:       # %bb.0:1222; SOFT-NEXT:    mflr r01223; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1224; SOFT-NEXT:    stdu r1, -48(r1)1225; SOFT-NEXT:    std r0, 64(r1)1226; SOFT-NEXT:    mr r30, r41227; SOFT-NEXT:    bl __floatundisf1228; SOFT-NEXT:    nop1229; SOFT-NEXT:    bl __truncsfhf21230; SOFT-NEXT:    nop1231; SOFT-NEXT:    clrldi r3, r3, 481232; SOFT-NEXT:    bl __extendhfsf21233; SOFT-NEXT:    nop1234; SOFT-NEXT:    bl __truncsfhf21235; SOFT-NEXT:    nop1236; SOFT-NEXT:    sth r3, 0(r30)1237; SOFT-NEXT:    addi r1, r1, 481238; SOFT-NEXT:    ld r0, 16(r1)1239; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1240; SOFT-NEXT:    mtlr r01241; SOFT-NEXT:    blr1242;1243; BE-LABEL: test_uitofp_i64:1244; BE:       # %bb.0:1245; BE-NEXT:    mflr r01246; BE-NEXT:    stdu r1, -144(r1)1247; BE-NEXT:    sradi r5, r3, 531248; BE-NEXT:    std r0, 160(r1)1249; BE-NEXT:    addi r5, r5, 11250; BE-NEXT:    cmpldi r5, 11251; BE-NEXT:    std r30, 128(r1) # 8-byte Folded Spill1252; BE-NEXT:    mr r30, r41253; BE-NEXT:    bgt cr0, .LBB18_21254; BE-NEXT:  # %bb.1:1255; BE-NEXT:    mr r4, r31256; BE-NEXT:    b .LBB18_31257; BE-NEXT:  .LBB18_2:1258; BE-NEXT:    clrldi r4, r3, 531259; BE-NEXT:    addi r4, r4, 20471260; BE-NEXT:    or r4, r4, r31261; BE-NEXT:    rldicr r4, r4, 0, 521262; BE-NEXT:  .LBB18_3:1263; BE-NEXT:    rldicl r5, r3, 10, 541264; BE-NEXT:    clrldi r6, r3, 631265; BE-NEXT:    std r4, 112(r1)1266; BE-NEXT:    addi r5, r5, 11267; BE-NEXT:    cmpldi r5, 11268; BE-NEXT:    rldicl r5, r3, 63, 11269; BE-NEXT:    or r4, r6, r51270; BE-NEXT:    ble cr0, .LBB18_51271; BE-NEXT:  # %bb.4:1272; BE-NEXT:    clrldi r4, r4, 531273; BE-NEXT:    addi r4, r4, 20471274; BE-NEXT:    or r4, r4, r51275; BE-NEXT:    rldicl r4, r4, 53, 111276; BE-NEXT:    rldicl r4, r4, 11, 11277; BE-NEXT:  .LBB18_5:1278; BE-NEXT:    cmpdi r3, 01279; BE-NEXT:    std r4, 120(r1)1280; BE-NEXT:    bc 12, lt, .LBB18_71281; BE-NEXT:  # %bb.6:1282; BE-NEXT:    lfd f0, 112(r1)1283; BE-NEXT:    fcfid f0, f01284; BE-NEXT:    frsp f1, f01285; BE-NEXT:    b .LBB18_81286; BE-NEXT:  .LBB18_7:1287; BE-NEXT:    lfd f0, 120(r1)1288; BE-NEXT:    fcfid f0, f01289; BE-NEXT:    frsp f0, f01290; BE-NEXT:    fadds f1, f0, f01291; BE-NEXT:  .LBB18_8:1292; BE-NEXT:    bl __truncsfhf21293; BE-NEXT:    nop1294; BE-NEXT:    sth r3, 0(r30)1295; BE-NEXT:    ld r30, 128(r1) # 8-byte Folded Reload1296; BE-NEXT:    addi r1, r1, 1441297; BE-NEXT:    ld r0, 16(r1)1298; BE-NEXT:    mtlr r01299; BE-NEXT:    blr1300  %r = uitofp i64 %a to half1301  store half %r, ptr %p1302  ret void1303}1304define <4 x float> @test_extend32_vec4(ptr %p) nounwind {1305; PPC32-LABEL: test_extend32_vec4:1306; PPC32:       # %bb.0:1307; PPC32-NEXT:    mflr r01308; PPC32-NEXT:    stwu r1, -48(r1)1309; PPC32-NEXT:    stw r0, 52(r1)1310; PPC32-NEXT:    stw r30, 16(r1) # 4-byte Folded Spill1311; PPC32-NEXT:    mr r30, r31312; PPC32-NEXT:    lhz r3, 0(r3)1313; PPC32-NEXT:    stfd f29, 24(r1) # 8-byte Folded Spill1314; PPC32-NEXT:    stfd f30, 32(r1) # 8-byte Folded Spill1315; PPC32-NEXT:    stfd f31, 40(r1) # 8-byte Folded Spill1316; PPC32-NEXT:    bl __extendhfsf21317; PPC32-NEXT:    lhz r3, 2(r30)1318; PPC32-NEXT:    fmr f31, f11319; PPC32-NEXT:    bl __extendhfsf21320; PPC32-NEXT:    lhz r3, 4(r30)1321; PPC32-NEXT:    fmr f30, f11322; PPC32-NEXT:    bl __extendhfsf21323; PPC32-NEXT:    lhz r3, 6(r30)1324; PPC32-NEXT:    fmr f29, f11325; PPC32-NEXT:    bl __extendhfsf21326; PPC32-NEXT:    fmr f4, f11327; PPC32-NEXT:    fmr f1, f311328; PPC32-NEXT:    fmr f2, f301329; PPC32-NEXT:    fmr f3, f291330; PPC32-NEXT:    lfd f31, 40(r1) # 8-byte Folded Reload1331; PPC32-NEXT:    lfd f30, 32(r1) # 8-byte Folded Reload1332; PPC32-NEXT:    lfd f29, 24(r1) # 8-byte Folded Reload1333; PPC32-NEXT:    lwz r30, 16(r1) # 4-byte Folded Reload1334; PPC32-NEXT:    lwz r0, 52(r1)1335; PPC32-NEXT:    addi r1, r1, 481336; PPC32-NEXT:    mtlr r01337; PPC32-NEXT:    blr1338;1339; P8-LABEL: test_extend32_vec4:1340; P8:       # %bb.0:1341; P8-NEXT:    mflr r01342; P8-NEXT:    stdu r1, -112(r1)1343; P8-NEXT:    li r4, 481344; P8-NEXT:    std r0, 128(r1)1345; P8-NEXT:    std r30, 96(r1) # 8-byte Folded Spill1346; P8-NEXT:    mr r30, r31347; P8-NEXT:    lhz r3, 6(r3)1348; P8-NEXT:    stxvd2x vs61, r1, r4 # 16-byte Folded Spill1349; P8-NEXT:    li r4, 641350; P8-NEXT:    stxvd2x vs62, r1, r4 # 16-byte Folded Spill1351; P8-NEXT:    li r4, 801352; P8-NEXT:    stxvd2x vs63, r1, r4 # 16-byte Folded Spill1353; P8-NEXT:    bl __extendhfsf21354; P8-NEXT:    nop1355; P8-NEXT:    lhz r3, 2(r30)1356; P8-NEXT:    xxlor vs63, f1, f11357; P8-NEXT:    bl __extendhfsf21358; P8-NEXT:    nop1359; P8-NEXT:    lhz r3, 4(r30)1360; P8-NEXT:    xxlor vs62, f1, f11361; P8-NEXT:    bl __extendhfsf21362; P8-NEXT:    nop1363; P8-NEXT:    lhz r3, 0(r30)1364; P8-NEXT:    xxlor vs61, f1, f11365; P8-NEXT:    bl __extendhfsf21366; P8-NEXT:    nop1367; P8-NEXT:    li r3, 801368; P8-NEXT:    xxmrghd vs0, vs61, vs11369; P8-NEXT:    xxmrghd vs1, vs63, vs621370; P8-NEXT:    ld r30, 96(r1) # 8-byte Folded Reload1371; P8-NEXT:    lxvd2x vs63, r1, r3 # 16-byte Folded Reload1372; P8-NEXT:    li r3, 641373; P8-NEXT:    xvcvdpsp vs34, vs01374; P8-NEXT:    xvcvdpsp vs35, vs11375; P8-NEXT:    lxvd2x vs62, r1, r3 # 16-byte Folded Reload1376; P8-NEXT:    li r3, 481377; P8-NEXT:    lxvd2x vs61, r1, r3 # 16-byte Folded Reload1378; P8-NEXT:    vmrgew v2, v3, v21379; P8-NEXT:    addi r1, r1, 1121380; P8-NEXT:    ld r0, 16(r1)1381; P8-NEXT:    mtlr r01382; P8-NEXT:    blr1383;1384; P9-LABEL: test_extend32_vec4:1385; P9:       # %bb.0:1386; P9-NEXT:    lhz r4, 6(r3)1387; P9-NEXT:    mtfprwz f0, r41388; P9-NEXT:    xscvhpdp f0, f01389; P9-NEXT:    lhz r4, 2(r3)1390; P9-NEXT:    mtfprwz f1, r41391; P9-NEXT:    xscvhpdp f1, f11392; P9-NEXT:    lhz r4, 4(r3)1393; P9-NEXT:    mtfprwz f2, r41394; P9-NEXT:    xscvhpdp f2, f21395; P9-NEXT:    lhz r3, 0(r3)1396; P9-NEXT:    xxmrghd vs0, vs0, vs11397; P9-NEXT:    mtfprwz f3, r31398; P9-NEXT:    xvcvdpsp vs35, vs01399; P9-NEXT:    xscvhpdp f3, f31400; P9-NEXT:    xxmrghd vs2, vs2, vs31401; P9-NEXT:    xvcvdpsp vs34, vs21402; P9-NEXT:    vmrgew v2, v3, v21403; P9-NEXT:    blr1404;1405; SOFT-LABEL: test_extend32_vec4:1406; SOFT:       # %bb.0:1407; SOFT-NEXT:    mflr r01408; SOFT-NEXT:    std r27, -40(r1) # 8-byte Folded Spill1409; SOFT-NEXT:    std r28, -32(r1) # 8-byte Folded Spill1410; SOFT-NEXT:    std r29, -24(r1) # 8-byte Folded Spill1411; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1412; SOFT-NEXT:    stdu r1, -80(r1)1413; SOFT-NEXT:    std r0, 96(r1)1414; SOFT-NEXT:    mr r30, r31415; SOFT-NEXT:    lhz r3, 0(r3)1416; SOFT-NEXT:    bl __extendhfsf21417; SOFT-NEXT:    nop1418; SOFT-NEXT:    mr r29, r31419; SOFT-NEXT:    lhz r3, 2(r30)1420; SOFT-NEXT:    bl __extendhfsf21421; SOFT-NEXT:    nop1422; SOFT-NEXT:    mr r28, r31423; SOFT-NEXT:    lhz r3, 4(r30)1424; SOFT-NEXT:    bl __extendhfsf21425; SOFT-NEXT:    nop1426; SOFT-NEXT:    mr r27, r31427; SOFT-NEXT:    lhz r3, 6(r30)1428; SOFT-NEXT:    bl __extendhfsf21429; SOFT-NEXT:    nop1430; SOFT-NEXT:    mr r6, r31431; SOFT-NEXT:    mr r3, r291432; SOFT-NEXT:    mr r4, r281433; SOFT-NEXT:    mr r5, r271434; SOFT-NEXT:    addi r1, r1, 801435; SOFT-NEXT:    ld r0, 16(r1)1436; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1437; SOFT-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload1438; SOFT-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload1439; SOFT-NEXT:    mtlr r01440; SOFT-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload1441; SOFT-NEXT:    blr1442;1443; BE-LABEL: test_extend32_vec4:1444; BE:       # %bb.0:1445; BE-NEXT:    mflr r01446; BE-NEXT:    stdu r1, -176(r1)1447; BE-NEXT:    std r0, 192(r1)1448; BE-NEXT:    std r30, 136(r1) # 8-byte Folded Spill1449; BE-NEXT:    mr r30, r31450; BE-NEXT:    lhz r3, 0(r3)1451; BE-NEXT:    stfd f29, 152(r1) # 8-byte Folded Spill1452; BE-NEXT:    stfd f30, 160(r1) # 8-byte Folded Spill1453; BE-NEXT:    stfd f31, 168(r1) # 8-byte Folded Spill1454; BE-NEXT:    bl __extendhfsf21455; BE-NEXT:    nop1456; BE-NEXT:    lhz r3, 2(r30)1457; BE-NEXT:    fmr f31, f11458; BE-NEXT:    bl __extendhfsf21459; BE-NEXT:    nop1460; BE-NEXT:    lhz r3, 4(r30)1461; BE-NEXT:    fmr f30, f11462; BE-NEXT:    bl __extendhfsf21463; BE-NEXT:    nop1464; BE-NEXT:    lhz r3, 6(r30)1465; BE-NEXT:    fmr f29, f11466; BE-NEXT:    bl __extendhfsf21467; BE-NEXT:    nop1468; BE-NEXT:    stfs f29, 120(r1)1469; BE-NEXT:    addi r3, r1, 1121470; BE-NEXT:    stfs f30, 116(r1)1471; BE-NEXT:    stfs f31, 112(r1)1472; BE-NEXT:    stfs f1, 124(r1)1473; BE-NEXT:    lvx v2, 0, r31474; BE-NEXT:    lfd f31, 168(r1) # 8-byte Folded Reload1475; BE-NEXT:    lfd f30, 160(r1) # 8-byte Folded Reload1476; BE-NEXT:    lfd f29, 152(r1) # 8-byte Folded Reload1477; BE-NEXT:    ld r30, 136(r1) # 8-byte Folded Reload1478; BE-NEXT:    addi r1, r1, 1761479; BE-NEXT:    ld r0, 16(r1)1480; BE-NEXT:    mtlr r01481; BE-NEXT:    blr1482  %a = load <4 x half>, ptr %p, align 81483  %b = fpext <4 x half> %a to <4 x float>1484  ret <4 x float> %b1485}1486define <4 x double> @test_extend64_vec4(ptr %p) nounwind {1487; PPC32-LABEL: test_extend64_vec4:1488; PPC32:       # %bb.0:1489; PPC32-NEXT:    mflr r01490; PPC32-NEXT:    stwu r1, -48(r1)1491; PPC32-NEXT:    stw r0, 52(r1)1492; PPC32-NEXT:    stw r30, 16(r1) # 4-byte Folded Spill1493; PPC32-NEXT:    mr r30, r31494; PPC32-NEXT:    lhz r3, 0(r3)1495; PPC32-NEXT:    stfd f29, 24(r1) # 8-byte Folded Spill1496; PPC32-NEXT:    stfd f30, 32(r1) # 8-byte Folded Spill1497; PPC32-NEXT:    stfd f31, 40(r1) # 8-byte Folded Spill1498; PPC32-NEXT:    bl __extendhfsf21499; PPC32-NEXT:    lhz r3, 2(r30)1500; PPC32-NEXT:    fmr f31, f11501; PPC32-NEXT:    bl __extendhfsf21502; PPC32-NEXT:    lhz r3, 4(r30)1503; PPC32-NEXT:    fmr f30, f11504; PPC32-NEXT:    bl __extendhfsf21505; PPC32-NEXT:    lhz r3, 6(r30)1506; PPC32-NEXT:    fmr f29, f11507; PPC32-NEXT:    bl __extendhfsf21508; PPC32-NEXT:    fmr f4, f11509; PPC32-NEXT:    fmr f1, f311510; PPC32-NEXT:    fmr f2, f301511; PPC32-NEXT:    fmr f3, f291512; PPC32-NEXT:    lfd f31, 40(r1) # 8-byte Folded Reload1513; PPC32-NEXT:    lfd f30, 32(r1) # 8-byte Folded Reload1514; PPC32-NEXT:    lfd f29, 24(r1) # 8-byte Folded Reload1515; PPC32-NEXT:    lwz r30, 16(r1) # 4-byte Folded Reload1516; PPC32-NEXT:    lwz r0, 52(r1)1517; PPC32-NEXT:    addi r1, r1, 481518; PPC32-NEXT:    mtlr r01519; PPC32-NEXT:    blr1520;1521; P8-LABEL: test_extend64_vec4:1522; P8:       # %bb.0:1523; P8-NEXT:    mflr r01524; P8-NEXT:    stdu r1, -112(r1)1525; P8-NEXT:    li r4, 481526; P8-NEXT:    std r0, 128(r1)1527; P8-NEXT:    std r30, 96(r1) # 8-byte Folded Spill1528; P8-NEXT:    mr r30, r31529; P8-NEXT:    lhz r3, 6(r3)1530; P8-NEXT:    stxvd2x vs61, r1, r4 # 16-byte Folded Spill1531; P8-NEXT:    li r4, 641532; P8-NEXT:    stxvd2x vs62, r1, r4 # 16-byte Folded Spill1533; P8-NEXT:    li r4, 801534; P8-NEXT:    stxvd2x vs63, r1, r4 # 16-byte Folded Spill1535; P8-NEXT:    bl __extendhfsf21536; P8-NEXT:    nop1537; P8-NEXT:    lhz r3, 4(r30)1538; P8-NEXT:    xxlor vs63, f1, f11539; P8-NEXT:    bl __extendhfsf21540; P8-NEXT:    nop1541; P8-NEXT:    lhz r3, 2(r30)1542; P8-NEXT:    xxlor vs62, f1, f11543; P8-NEXT:    bl __extendhfsf21544; P8-NEXT:    nop1545; P8-NEXT:    lhz r3, 0(r30)1546; P8-NEXT:    xxlor vs61, f1, f11547; P8-NEXT:    bl __extendhfsf21548; P8-NEXT:    nop1549; P8-NEXT:    li r3, 801550; P8-NEXT:    xxmrghd vs35, vs63, vs621551; P8-NEXT:    xxmrghd vs34, vs61, vs11552; P8-NEXT:    ld r30, 96(r1) # 8-byte Folded Reload1553; P8-NEXT:    lxvd2x vs63, r1, r3 # 16-byte Folded Reload1554; P8-NEXT:    li r3, 641555; P8-NEXT:    lxvd2x vs62, r1, r3 # 16-byte Folded Reload1556; P8-NEXT:    li r3, 481557; P8-NEXT:    lxvd2x vs61, r1, r3 # 16-byte Folded Reload1558; P8-NEXT:    addi r1, r1, 1121559; P8-NEXT:    ld r0, 16(r1)1560; P8-NEXT:    mtlr r01561; P8-NEXT:    blr1562;1563; P9-LABEL: test_extend64_vec4:1564; P9:       # %bb.0:1565; P9-NEXT:    lhz r4, 6(r3)1566; P9-NEXT:    lhz r5, 4(r3)1567; P9-NEXT:    lhz r6, 2(r3)1568; P9-NEXT:    lhz r3, 0(r3)1569; P9-NEXT:    mtfprwz f0, r31570; P9-NEXT:    mtfprwz f1, r61571; P9-NEXT:    xscvhpdp f0, f01572; P9-NEXT:    xscvhpdp f1, f11573; P9-NEXT:    xxmrghd vs34, vs1, vs01574; P9-NEXT:    mtfprwz f0, r51575; P9-NEXT:    mtfprwz f1, r41576; P9-NEXT:    xscvhpdp f0, f01577; P9-NEXT:    xscvhpdp f1, f11578; P9-NEXT:    xxmrghd vs35, vs1, vs01579; P9-NEXT:    blr1580;1581; SOFT-LABEL: test_extend64_vec4:1582; SOFT:       # %bb.0:1583; SOFT-NEXT:    mflr r01584; SOFT-NEXT:    std r27, -40(r1) # 8-byte Folded Spill1585; SOFT-NEXT:    std r28, -32(r1) # 8-byte Folded Spill1586; SOFT-NEXT:    std r29, -24(r1) # 8-byte Folded Spill1587; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1588; SOFT-NEXT:    stdu r1, -80(r1)1589; SOFT-NEXT:    std r0, 96(r1)1590; SOFT-NEXT:    mr r30, r31591; SOFT-NEXT:    lhz r3, 0(r3)1592; SOFT-NEXT:    bl __extendhfsf21593; SOFT-NEXT:    nop1594; SOFT-NEXT:    bl __extendsfdf21595; SOFT-NEXT:    nop1596; SOFT-NEXT:    mr r29, r31597; SOFT-NEXT:    lhz r3, 2(r30)1598; SOFT-NEXT:    bl __extendhfsf21599; SOFT-NEXT:    nop1600; SOFT-NEXT:    bl __extendsfdf21601; SOFT-NEXT:    nop1602; SOFT-NEXT:    mr r28, r31603; SOFT-NEXT:    lhz r3, 4(r30)1604; SOFT-NEXT:    bl __extendhfsf21605; SOFT-NEXT:    nop1606; SOFT-NEXT:    bl __extendsfdf21607; SOFT-NEXT:    nop1608; SOFT-NEXT:    mr r27, r31609; SOFT-NEXT:    lhz r3, 6(r30)1610; SOFT-NEXT:    bl __extendhfsf21611; SOFT-NEXT:    nop1612; SOFT-NEXT:    bl __extendsfdf21613; SOFT-NEXT:    nop1614; SOFT-NEXT:    mr r6, r31615; SOFT-NEXT:    mr r3, r291616; SOFT-NEXT:    mr r4, r281617; SOFT-NEXT:    mr r5, r271618; SOFT-NEXT:    addi r1, r1, 801619; SOFT-NEXT:    ld r0, 16(r1)1620; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1621; SOFT-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload1622; SOFT-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload1623; SOFT-NEXT:    mtlr r01624; SOFT-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload1625; SOFT-NEXT:    blr1626;1627; BE-LABEL: test_extend64_vec4:1628; BE:       # %bb.0:1629; BE-NEXT:    mflr r01630; BE-NEXT:    stdu r1, -160(r1)1631; BE-NEXT:    std r0, 176(r1)1632; BE-NEXT:    std r30, 120(r1) # 8-byte Folded Spill1633; BE-NEXT:    mr r30, r31634; BE-NEXT:    lhz r3, 6(r3)1635; BE-NEXT:    stfd f29, 136(r1) # 8-byte Folded Spill1636; BE-NEXT:    stfd f30, 144(r1) # 8-byte Folded Spill1637; BE-NEXT:    stfd f31, 152(r1) # 8-byte Folded Spill1638; BE-NEXT:    bl __extendhfsf21639; BE-NEXT:    nop1640; BE-NEXT:    lhz r3, 4(r30)1641; BE-NEXT:    fmr f31, f11642; BE-NEXT:    bl __extendhfsf21643; BE-NEXT:    nop1644; BE-NEXT:    lhz r3, 2(r30)1645; BE-NEXT:    fmr f30, f11646; BE-NEXT:    bl __extendhfsf21647; BE-NEXT:    nop1648; BE-NEXT:    lhz r3, 0(r30)1649; BE-NEXT:    fmr f29, f11650; BE-NEXT:    bl __extendhfsf21651; BE-NEXT:    nop1652; BE-NEXT:    fmr f2, f291653; BE-NEXT:    fmr f3, f301654; BE-NEXT:    lfd f30, 144(r1) # 8-byte Folded Reload1655; BE-NEXT:    lfd f29, 136(r1) # 8-byte Folded Reload1656; BE-NEXT:    fmr f4, f311657; BE-NEXT:    lfd f31, 152(r1) # 8-byte Folded Reload1658; BE-NEXT:    ld r30, 120(r1) # 8-byte Folded Reload1659; BE-NEXT:    addi r1, r1, 1601660; BE-NEXT:    ld r0, 16(r1)1661; BE-NEXT:    mtlr r01662; BE-NEXT:    blr1663  %a = load <4 x half>, ptr %p, align 81664  %b = fpext <4 x half> %a to <4 x double>1665  ret <4 x double> %b1666}1667define void @test_trunc32_vec4(<4 x float> %a, ptr %p) nounwind {1668; PPC32-LABEL: test_trunc32_vec4:1669; PPC32:       # %bb.0:1670; PPC32-NEXT:    mflr r01671; PPC32-NEXT:    stwu r1, -64(r1)1672; PPC32-NEXT:    stw r0, 68(r1)1673; PPC32-NEXT:    stw r27, 20(r1) # 4-byte Folded Spill1674; PPC32-NEXT:    stw r28, 24(r1) # 4-byte Folded Spill1675; PPC32-NEXT:    stw r29, 28(r1) # 4-byte Folded Spill1676; PPC32-NEXT:    stw r30, 32(r1) # 4-byte Folded Spill1677; PPC32-NEXT:    mr r30, r31678; PPC32-NEXT:    stfd f29, 40(r1) # 8-byte Folded Spill1679; PPC32-NEXT:    fmr f29, f21680; PPC32-NEXT:    stfd f30, 48(r1) # 8-byte Folded Spill1681; PPC32-NEXT:    fmr f30, f31682; PPC32-NEXT:    stfd f31, 56(r1) # 8-byte Folded Spill1683; PPC32-NEXT:    fmr f31, f41684; PPC32-NEXT:    bl __truncsfhf21685; PPC32-NEXT:    fmr f1, f291686; PPC32-NEXT:    mr r29, r31687; PPC32-NEXT:    bl __truncsfhf21688; PPC32-NEXT:    fmr f1, f301689; PPC32-NEXT:    mr r28, r31690; PPC32-NEXT:    bl __truncsfhf21691; PPC32-NEXT:    fmr f1, f311692; PPC32-NEXT:    mr r27, r31693; PPC32-NEXT:    bl __truncsfhf21694; PPC32-NEXT:    sth r27, 4(r30)1695; PPC32-NEXT:    sth r28, 2(r30)1696; PPC32-NEXT:    sth r3, 6(r30)1697; PPC32-NEXT:    sth r29, 0(r30)1698; PPC32-NEXT:    lfd f31, 56(r1) # 8-byte Folded Reload1699; PPC32-NEXT:    lfd f30, 48(r1) # 8-byte Folded Reload1700; PPC32-NEXT:    lfd f29, 40(r1) # 8-byte Folded Reload1701; PPC32-NEXT:    lwz r30, 32(r1) # 4-byte Folded Reload1702; PPC32-NEXT:    lwz r29, 28(r1) # 4-byte Folded Reload1703; PPC32-NEXT:    lwz r28, 24(r1) # 4-byte Folded Reload1704; PPC32-NEXT:    lwz r27, 20(r1) # 4-byte Folded Reload1705; PPC32-NEXT:    lwz r0, 68(r1)1706; PPC32-NEXT:    addi r1, r1, 641707; PPC32-NEXT:    mtlr r01708; PPC32-NEXT:    blr1709;1710; P8-LABEL: test_trunc32_vec4:1711; P8:       # %bb.0:1712; P8-NEXT:    mflr r01713; P8-NEXT:    stdu r1, -112(r1)1714; P8-NEXT:    xxsldwi vs0, vs34, vs34, 31715; P8-NEXT:    li r3, 481716; P8-NEXT:    std r0, 128(r1)1717; P8-NEXT:    std r27, 72(r1) # 8-byte Folded Spill1718; P8-NEXT:    std r28, 80(r1) # 8-byte Folded Spill1719; P8-NEXT:    std r29, 88(r1) # 8-byte Folded Spill1720; P8-NEXT:    xscvspdpn f1, vs01721; P8-NEXT:    std r30, 96(r1) # 8-byte Folded Spill1722; P8-NEXT:    stxvd2x vs63, r1, r3 # 16-byte Folded Spill1723; P8-NEXT:    mr r30, r51724; P8-NEXT:    vmr v31, v21725; P8-NEXT:    bl __truncsfhf21726; P8-NEXT:    nop1727; P8-NEXT:    xxswapd vs0, vs631728; P8-NEXT:    mr r29, r31729; P8-NEXT:    xscvspdpn f1, vs01730; P8-NEXT:    bl __truncsfhf21731; P8-NEXT:    nop1732; P8-NEXT:    xxsldwi vs0, vs63, vs63, 11733; P8-NEXT:    mr r28, r31734; P8-NEXT:    xscvspdpn f1, vs01735; P8-NEXT:    bl __truncsfhf21736; P8-NEXT:    nop1737; P8-NEXT:    xscvspdpn f1, vs631738; P8-NEXT:    mr r27, r31739; P8-NEXT:    bl __truncsfhf21740; P8-NEXT:    nop1741; P8-NEXT:    sth r3, 6(r30)1742; P8-NEXT:    li r3, 481743; P8-NEXT:    sth r27, 4(r30)1744; P8-NEXT:    ld r27, 72(r1) # 8-byte Folded Reload1745; P8-NEXT:    sth r28, 2(r30)1746; P8-NEXT:    sth r29, 0(r30)1747; P8-NEXT:    ld r30, 96(r1) # 8-byte Folded Reload1748; P8-NEXT:    ld r29, 88(r1) # 8-byte Folded Reload1749; P8-NEXT:    lxvd2x vs63, r1, r3 # 16-byte Folded Reload1750; P8-NEXT:    ld r28, 80(r1) # 8-byte Folded Reload1751; P8-NEXT:    addi r1, r1, 1121752; P8-NEXT:    ld r0, 16(r1)1753; P8-NEXT:    mtlr r01754; P8-NEXT:    blr1755;1756; P9-LABEL: test_trunc32_vec4:1757; P9:       # %bb.0:1758; P9-NEXT:    xxsldwi vs0, vs34, vs34, 31759; P9-NEXT:    xxsldwi vs1, vs34, vs34, 11760; P9-NEXT:    xscvspdpn f0, vs01761; P9-NEXT:    xscvspdpn f1, vs11762; P9-NEXT:    xscvdphp f0, f01763; P9-NEXT:    mffprwz r3, f01764; P9-NEXT:    xxswapd vs0, vs341765; P9-NEXT:    xscvspdpn f0, vs01766; P9-NEXT:    xscvdphp f0, f01767; P9-NEXT:    xscvdphp f1, f11768; P9-NEXT:    mffprwz r4, f11769; P9-NEXT:    xscvspdpn f1, vs341770; P9-NEXT:    xscvdphp f1, f11771; P9-NEXT:    sth r4, 4(r5)1772; P9-NEXT:    mffprwz r4, f01773; P9-NEXT:    sth r3, 0(r5)1774; P9-NEXT:    sth r4, 2(r5)1775; P9-NEXT:    mffprwz r6, f11776; P9-NEXT:    sth r6, 6(r5)1777; P9-NEXT:    blr1778;1779; SOFT-LABEL: test_trunc32_vec4:1780; SOFT:       # %bb.0:1781; SOFT-NEXT:    mflr r01782; SOFT-NEXT:    std r26, -48(r1) # 8-byte Folded Spill1783; SOFT-NEXT:    std r27, -40(r1) # 8-byte Folded Spill1784; SOFT-NEXT:    std r28, -32(r1) # 8-byte Folded Spill1785; SOFT-NEXT:    std r29, -24(r1) # 8-byte Folded Spill1786; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill1787; SOFT-NEXT:    stdu r1, -80(r1)1788; SOFT-NEXT:    mr r27, r31789; SOFT-NEXT:    clrldi r3, r6, 321790; SOFT-NEXT:    std r0, 96(r1)1791; SOFT-NEXT:    mr r30, r71792; SOFT-NEXT:    mr r29, r51793; SOFT-NEXT:    mr r28, r41794; SOFT-NEXT:    bl __truncsfhf21795; SOFT-NEXT:    nop1796; SOFT-NEXT:    mr r26, r31797; SOFT-NEXT:    clrldi r3, r29, 321798; SOFT-NEXT:    bl __truncsfhf21799; SOFT-NEXT:    nop1800; SOFT-NEXT:    mr r29, r31801; SOFT-NEXT:    clrldi r3, r28, 321802; SOFT-NEXT:    bl __truncsfhf21803; SOFT-NEXT:    nop1804; SOFT-NEXT:    mr r28, r31805; SOFT-NEXT:    clrldi r3, r27, 321806; SOFT-NEXT:    bl __truncsfhf21807; SOFT-NEXT:    nop1808; SOFT-NEXT:    clrldi r3, r3, 481809; SOFT-NEXT:    bl __extendhfsf21810; SOFT-NEXT:    nop1811; SOFT-NEXT:    mr r27, r31812; SOFT-NEXT:    clrldi r3, r28, 481813; SOFT-NEXT:    bl __extendhfsf21814; SOFT-NEXT:    nop1815; SOFT-NEXT:    mr r28, r31816; SOFT-NEXT:    clrldi r3, r29, 481817; SOFT-NEXT:    bl __extendhfsf21818; SOFT-NEXT:    nop1819; SOFT-NEXT:    mr r29, r31820; SOFT-NEXT:    clrldi r3, r26, 481821; SOFT-NEXT:    bl __extendhfsf21822; SOFT-NEXT:    nop1823; SOFT-NEXT:    bl __truncsfhf21824; SOFT-NEXT:    nop1825; SOFT-NEXT:    sth r3, 6(r30)1826; SOFT-NEXT:    mr r3, r291827; SOFT-NEXT:    bl __truncsfhf21828; SOFT-NEXT:    nop1829; SOFT-NEXT:    sth r3, 4(r30)1830; SOFT-NEXT:    mr r3, r281831; SOFT-NEXT:    bl __truncsfhf21832; SOFT-NEXT:    nop1833; SOFT-NEXT:    sth r3, 2(r30)1834; SOFT-NEXT:    mr r3, r271835; SOFT-NEXT:    bl __truncsfhf21836; SOFT-NEXT:    nop1837; SOFT-NEXT:    sth r3, 0(r30)1838; SOFT-NEXT:    addi r1, r1, 801839; SOFT-NEXT:    ld r0, 16(r1)1840; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload1841; SOFT-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload1842; SOFT-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload1843; SOFT-NEXT:    mtlr r01844; SOFT-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload1845; SOFT-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload1846; SOFT-NEXT:    blr1847;1848; BE-LABEL: test_trunc32_vec4:1849; BE:       # %bb.0:1850; BE-NEXT:    mflr r01851; BE-NEXT:    stdu r1, -176(r1)1852; BE-NEXT:    addi r3, r1, 1121853; BE-NEXT:    std r0, 192(r1)1854; BE-NEXT:    std r27, 136(r1) # 8-byte Folded Spill1855; BE-NEXT:    std r28, 144(r1) # 8-byte Folded Spill1856; BE-NEXT:    std r29, 152(r1) # 8-byte Folded Spill1857; BE-NEXT:    std r30, 160(r1) # 8-byte Folded Spill1858; BE-NEXT:    mr r30, r51859; BE-NEXT:    stvx v2, 0, r31860; BE-NEXT:    lfs f1, 112(r1)1861; BE-NEXT:    bl __truncsfhf21862; BE-NEXT:    nop1863; BE-NEXT:    lfs f1, 116(r1)1864; BE-NEXT:    mr r29, r31865; BE-NEXT:    bl __truncsfhf21866; BE-NEXT:    nop1867; BE-NEXT:    lfs f1, 120(r1)1868; BE-NEXT:    mr r28, r31869; BE-NEXT:    bl __truncsfhf21870; BE-NEXT:    nop1871; BE-NEXT:    lfs f1, 124(r1)1872; BE-NEXT:    mr r27, r31873; BE-NEXT:    bl __truncsfhf21874; BE-NEXT:    nop1875; BE-NEXT:    sth r27, 4(r30)1876; BE-NEXT:    sth r28, 2(r30)1877; BE-NEXT:    sth r3, 6(r30)1878; BE-NEXT:    sth r29, 0(r30)1879; BE-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload1880; BE-NEXT:    ld r29, 152(r1) # 8-byte Folded Reload1881; BE-NEXT:    ld r28, 144(r1) # 8-byte Folded Reload1882; BE-NEXT:    ld r27, 136(r1) # 8-byte Folded Reload1883; BE-NEXT:    addi r1, r1, 1761884; BE-NEXT:    ld r0, 16(r1)1885; BE-NEXT:    mtlr r01886; BE-NEXT:    blr1887  %v = fptrunc <4 x float> %a to <4 x half>1888  store <4 x half> %v, ptr %p1889  ret void1890}1891define void @test_trunc64_vec4(<4 x double> %a, ptr %p) nounwind {1892; PPC32-LABEL: test_trunc64_vec4:1893; PPC32:       # %bb.0:1894; PPC32-NEXT:    mflr r01895; PPC32-NEXT:    stwu r1, -64(r1)1896; PPC32-NEXT:    stw r0, 68(r1)1897; PPC32-NEXT:    stw r27, 20(r1) # 4-byte Folded Spill1898; PPC32-NEXT:    stw r28, 24(r1) # 4-byte Folded Spill1899; PPC32-NEXT:    stw r29, 28(r1) # 4-byte Folded Spill1900; PPC32-NEXT:    stw r30, 32(r1) # 4-byte Folded Spill1901; PPC32-NEXT:    mr r30, r31902; PPC32-NEXT:    stfd f29, 40(r1) # 8-byte Folded Spill1903; PPC32-NEXT:    fmr f29, f21904; PPC32-NEXT:    stfd f30, 48(r1) # 8-byte Folded Spill1905; PPC32-NEXT:    fmr f30, f31906; PPC32-NEXT:    stfd f31, 56(r1) # 8-byte Folded Spill1907; PPC32-NEXT:    fmr f31, f41908; PPC32-NEXT:    bl __truncdfhf21909; PPC32-NEXT:    fmr f1, f291910; PPC32-NEXT:    mr r29, r31911; PPC32-NEXT:    bl __truncdfhf21912; PPC32-NEXT:    fmr f1, f301913; PPC32-NEXT:    mr r28, r31914; PPC32-NEXT:    bl __truncdfhf21915; PPC32-NEXT:    fmr f1, f311916; PPC32-NEXT:    mr r27, r31917; PPC32-NEXT:    bl __truncdfhf21918; PPC32-NEXT:    sth r27, 4(r30)1919; PPC32-NEXT:    sth r28, 2(r30)1920; PPC32-NEXT:    sth r3, 6(r30)1921; PPC32-NEXT:    sth r29, 0(r30)1922; PPC32-NEXT:    lfd f31, 56(r1) # 8-byte Folded Reload1923; PPC32-NEXT:    lfd f30, 48(r1) # 8-byte Folded Reload1924; PPC32-NEXT:    lfd f29, 40(r1) # 8-byte Folded Reload1925; PPC32-NEXT:    lwz r30, 32(r1) # 4-byte Folded Reload1926; PPC32-NEXT:    lwz r29, 28(r1) # 4-byte Folded Reload1927; PPC32-NEXT:    lwz r28, 24(r1) # 4-byte Folded Reload1928; PPC32-NEXT:    lwz r27, 20(r1) # 4-byte Folded Reload1929; PPC32-NEXT:    lwz r0, 68(r1)1930; PPC32-NEXT:    addi r1, r1, 641931; PPC32-NEXT:    mtlr r01932; PPC32-NEXT:    blr1933;1934; P8-LABEL: test_trunc64_vec4:1935; P8:       # %bb.0:1936; P8-NEXT:    mflr r01937; P8-NEXT:    stdu r1, -128(r1)1938; P8-NEXT:    li r3, 481939; P8-NEXT:    std r0, 144(r1)1940; P8-NEXT:    xxswapd vs1, vs341941; P8-NEXT:    std r27, 88(r1) # 8-byte Folded Spill1942; P8-NEXT:    std r28, 96(r1) # 8-byte Folded Spill1943; P8-NEXT:    std r29, 104(r1) # 8-byte Folded Spill1944; P8-NEXT:    std r30, 112(r1) # 8-byte Folded Spill1945; P8-NEXT:    mr r30, r71946; P8-NEXT:    stxvd2x vs62, r1, r3 # 16-byte Folded Spill1947; P8-NEXT:    li r3, 641948; P8-NEXT:    vmr v30, v21949; P8-NEXT:    stxvd2x vs63, r1, r3 # 16-byte Folded Spill1950; P8-NEXT:    vmr v31, v31951; P8-NEXT:    bl __truncdfhf21952; P8-NEXT:    nop1953; P8-NEXT:    xxswapd vs1, vs631954; P8-NEXT:    mr r29, r31955; P8-NEXT:    bl __truncdfhf21956; P8-NEXT:    nop1957; P8-NEXT:    xxlor f1, vs62, vs621958; P8-NEXT:    mr r28, r31959; P8-NEXT:    bl __truncdfhf21960; P8-NEXT:    nop1961; P8-NEXT:    xxlor f1, vs63, vs631962; P8-NEXT:    mr r27, r31963; P8-NEXT:    bl __truncdfhf21964; P8-NEXT:    nop1965; P8-NEXT:    sth r3, 6(r30)1966; P8-NEXT:    li r3, 641967; P8-NEXT:    sth r27, 2(r30)1968; P8-NEXT:    ld r27, 88(r1) # 8-byte Folded Reload1969; P8-NEXT:    sth r28, 4(r30)1970; P8-NEXT:    sth r29, 0(r30)1971; P8-NEXT:    ld r30, 112(r1) # 8-byte Folded Reload1972; P8-NEXT:    ld r29, 104(r1) # 8-byte Folded Reload1973; P8-NEXT:    lxvd2x vs63, r1, r3 # 16-byte Folded Reload1974; P8-NEXT:    li r3, 481975; P8-NEXT:    ld r28, 96(r1) # 8-byte Folded Reload1976; P8-NEXT:    lxvd2x vs62, r1, r3 # 16-byte Folded Reload1977; P8-NEXT:    addi r1, r1, 1281978; P8-NEXT:    ld r0, 16(r1)1979; P8-NEXT:    mtlr r01980; P8-NEXT:    blr1981;1982; P9-LABEL: test_trunc64_vec4:1983; P9:       # %bb.0:1984; P9-NEXT:    xxswapd vs0, vs341985; P9-NEXT:    xscvdphp f0, f01986; P9-NEXT:    mffprwz r3, f01987; P9-NEXT:    xxswapd vs0, vs351988; P9-NEXT:    xscvdphp f0, f01989; P9-NEXT:    xscvdphp f1, vs341990; P9-NEXT:    mffprwz r4, f11991; P9-NEXT:    xscvdphp f1, vs351992; P9-NEXT:    sth r3, 0(r7)1993; P9-NEXT:    sth r4, 2(r7)1994; P9-NEXT:    mffprwz r4, f01995; P9-NEXT:    sth r4, 4(r7)1996; P9-NEXT:    mffprwz r5, f11997; P9-NEXT:    sth r5, 6(r7)1998; P9-NEXT:    blr1999;2000; SOFT-LABEL: test_trunc64_vec4:2001; SOFT:       # %bb.0:2002; SOFT-NEXT:    mflr r02003; SOFT-NEXT:    std r26, -48(r1) # 8-byte Folded Spill2004; SOFT-NEXT:    std r27, -40(r1) # 8-byte Folded Spill2005; SOFT-NEXT:    std r28, -32(r1) # 8-byte Folded Spill2006; SOFT-NEXT:    std r29, -24(r1) # 8-byte Folded Spill2007; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill2008; SOFT-NEXT:    stdu r1, -80(r1)2009; SOFT-NEXT:    mr r27, r32010; SOFT-NEXT:    mr r3, r62011; SOFT-NEXT:    std r0, 96(r1)2012; SOFT-NEXT:    mr r30, r72013; SOFT-NEXT:    mr r29, r52014; SOFT-NEXT:    mr r28, r42015; SOFT-NEXT:    bl __truncdfhf22016; SOFT-NEXT:    nop2017; SOFT-NEXT:    mr r26, r32018; SOFT-NEXT:    mr r3, r292019; SOFT-NEXT:    bl __truncdfhf22020; SOFT-NEXT:    nop2021; SOFT-NEXT:    mr r29, r32022; SOFT-NEXT:    mr r3, r282023; SOFT-NEXT:    bl __truncdfhf22024; SOFT-NEXT:    nop2025; SOFT-NEXT:    mr r28, r32026; SOFT-NEXT:    mr r3, r272027; SOFT-NEXT:    bl __truncdfhf22028; SOFT-NEXT:    nop2029; SOFT-NEXT:    clrldi r3, r3, 482030; SOFT-NEXT:    bl __extendhfsf22031; SOFT-NEXT:    nop2032; SOFT-NEXT:    mr r27, r32033; SOFT-NEXT:    clrldi r3, r28, 482034; SOFT-NEXT:    bl __extendhfsf22035; SOFT-NEXT:    nop2036; SOFT-NEXT:    mr r28, r32037; SOFT-NEXT:    clrldi r3, r29, 482038; SOFT-NEXT:    bl __extendhfsf22039; SOFT-NEXT:    nop2040; SOFT-NEXT:    mr r29, r32041; SOFT-NEXT:    clrldi r3, r26, 482042; SOFT-NEXT:    bl __extendhfsf22043; SOFT-NEXT:    nop2044; SOFT-NEXT:    bl __truncsfhf22045; SOFT-NEXT:    nop2046; SOFT-NEXT:    sth r3, 6(r30)2047; SOFT-NEXT:    mr r3, r292048; SOFT-NEXT:    bl __truncsfhf22049; SOFT-NEXT:    nop2050; SOFT-NEXT:    sth r3, 4(r30)2051; SOFT-NEXT:    mr r3, r282052; SOFT-NEXT:    bl __truncsfhf22053; SOFT-NEXT:    nop2054; SOFT-NEXT:    sth r3, 2(r30)2055; SOFT-NEXT:    mr r3, r272056; SOFT-NEXT:    bl __truncsfhf22057; SOFT-NEXT:    nop2058; SOFT-NEXT:    sth r3, 0(r30)2059; SOFT-NEXT:    addi r1, r1, 802060; SOFT-NEXT:    ld r0, 16(r1)2061; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload2062; SOFT-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload2063; SOFT-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload2064; SOFT-NEXT:    mtlr r02065; SOFT-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload2066; SOFT-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload2067; SOFT-NEXT:    blr2068;2069; BE-LABEL: test_trunc64_vec4:2070; BE:       # %bb.0:2071; BE-NEXT:    mflr r02072; BE-NEXT:    stdu r1, -176(r1)2073; BE-NEXT:    std r0, 192(r1)2074; BE-NEXT:    std r27, 112(r1) # 8-byte Folded Spill2075; BE-NEXT:    std r28, 120(r1) # 8-byte Folded Spill2076; BE-NEXT:    std r29, 128(r1) # 8-byte Folded Spill2077; BE-NEXT:    std r30, 136(r1) # 8-byte Folded Spill2078; BE-NEXT:    mr r30, r72079; BE-NEXT:    stfd f29, 152(r1) # 8-byte Folded Spill2080; BE-NEXT:    fmr f29, f22081; BE-NEXT:    stfd f30, 160(r1) # 8-byte Folded Spill2082; BE-NEXT:    fmr f30, f32083; BE-NEXT:    stfd f31, 168(r1) # 8-byte Folded Spill2084; BE-NEXT:    fmr f31, f42085; BE-NEXT:    bl __truncdfhf22086; BE-NEXT:    nop2087; BE-NEXT:    fmr f1, f292088; BE-NEXT:    mr r29, r32089; BE-NEXT:    bl __truncdfhf22090; BE-NEXT:    nop2091; BE-NEXT:    fmr f1, f302092; BE-NEXT:    mr r28, r32093; BE-NEXT:    bl __truncdfhf22094; BE-NEXT:    nop2095; BE-NEXT:    fmr f1, f312096; BE-NEXT:    mr r27, r32097; BE-NEXT:    bl __truncdfhf22098; BE-NEXT:    nop2099; BE-NEXT:    sth r27, 4(r30)2100; BE-NEXT:    sth r28, 2(r30)2101; BE-NEXT:    sth r3, 6(r30)2102; BE-NEXT:    sth r29, 0(r30)2103; BE-NEXT:    lfd f31, 168(r1) # 8-byte Folded Reload2104; BE-NEXT:    lfd f30, 160(r1) # 8-byte Folded Reload2105; BE-NEXT:    lfd f29, 152(r1) # 8-byte Folded Reload2106; BE-NEXT:    ld r30, 136(r1) # 8-byte Folded Reload2107; BE-NEXT:    ld r29, 128(r1) # 8-byte Folded Reload2108; BE-NEXT:    ld r28, 120(r1) # 8-byte Folded Reload2109; BE-NEXT:    ld r27, 112(r1) # 8-byte Folded Reload2110; BE-NEXT:    addi r1, r1, 1762111; BE-NEXT:    ld r0, 16(r1)2112; BE-NEXT:    mtlr r02113; BE-NEXT:    blr2114  %v = fptrunc <4 x double> %a to <4 x half>2115  store <4 x half> %v, ptr %p2116  ret void2117}2118define float @test_sitofp_fadd_i32(i32 %a, ptr %b) nounwind {2119; PPC32-LABEL: test_sitofp_fadd_i32:2120; PPC32:       # %bb.0:2121; PPC32-NEXT:    mflr r02122; PPC32-NEXT:    stwu r1, -32(r1)2123; PPC32-NEXT:    stw r0, 36(r1)2124; PPC32-NEXT:    stw r30, 16(r1) # 4-byte Folded Spill2125; PPC32-NEXT:    mr r30, r32126; PPC32-NEXT:    lhz r3, 0(r4)2127; PPC32-NEXT:    stfd f31, 24(r1) # 8-byte Folded Spill2128; PPC32-NEXT:    bl __extendhfsf22129; PPC32-NEXT:    lis r3, 172002130; PPC32-NEXT:    stw r3, 8(r1)2131; PPC32-NEXT:    xoris r3, r30, 327682132; PPC32-NEXT:    stw r3, 12(r1)2133; PPC32-NEXT:    lis r3, .LCPI23_0@ha2134; PPC32-NEXT:    fmr f31, f12135; PPC32-NEXT:    lfd f0, 8(r1)2136; PPC32-NEXT:    lfs f1, .LCPI23_0@l(r3)2137; PPC32-NEXT:    fsub f0, f0, f12138; PPC32-NEXT:    frsp f1, f02139; PPC32-NEXT:    bl __truncsfhf22140; PPC32-NEXT:    clrlwi r3, r3, 162141; PPC32-NEXT:    bl __extendhfsf22142; PPC32-NEXT:    fadds f1, f31, f12143; PPC32-NEXT:    lfd f31, 24(r1) # 8-byte Folded Reload2144; PPC32-NEXT:    lwz r30, 16(r1) # 4-byte Folded Reload2145; PPC32-NEXT:    lwz r0, 36(r1)2146; PPC32-NEXT:    addi r1, r1, 322147; PPC32-NEXT:    mtlr r02148; PPC32-NEXT:    blr2149;2150; P8-LABEL: test_sitofp_fadd_i32:2151; P8:       # %bb.0:2152; P8-NEXT:    mflr r02153; P8-NEXT:    std r30, -24(r1) # 8-byte Folded Spill2154; P8-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill2155; P8-NEXT:    stdu r1, -64(r1)2156; P8-NEXT:    std r0, 80(r1)2157; P8-NEXT:    mr r30, r32158; P8-NEXT:    lhz r3, 0(r4)2159; P8-NEXT:    bl __extendhfsf22160; P8-NEXT:    nop2161; P8-NEXT:    mtfprwa f0, r302162; P8-NEXT:    fmr f31, f12163; P8-NEXT:    xscvsxdsp f1, f02164; P8-NEXT:    bl __truncsfhf22165; P8-NEXT:    nop2166; P8-NEXT:    clrldi r3, r3, 482167; P8-NEXT:    bl __extendhfsf22168; P8-NEXT:    nop2169; P8-NEXT:    xsaddsp f1, f31, f12170; P8-NEXT:    addi r1, r1, 642171; P8-NEXT:    ld r0, 16(r1)2172; P8-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload2173; P8-NEXT:    ld r30, -24(r1) # 8-byte Folded Reload2174; P8-NEXT:    mtlr r02175; P8-NEXT:    blr2176;2177; P9-LABEL: test_sitofp_fadd_i32:2178; P9:       # %bb.0:2179; P9-NEXT:    mtfprwa f1, r32180; P9-NEXT:    lhz r4, 0(r4)2181; P9-NEXT:    xscvsxdsp f1, f12182; P9-NEXT:    mtfprwz f0, r42183; P9-NEXT:    xscvhpdp f0, f02184; P9-NEXT:    xscvdphp f1, f12185; P9-NEXT:    mffprwz r3, f12186; P9-NEXT:    clrlwi r3, r3, 162187; P9-NEXT:    mtfprwz f1, r32188; P9-NEXT:    xscvhpdp f1, f12189; P9-NEXT:    xsaddsp f1, f0, f12190; P9-NEXT:    blr2191;2192; SOFT-LABEL: test_sitofp_fadd_i32:2193; SOFT:       # %bb.0:2194; SOFT-NEXT:    mflr r02195; SOFT-NEXT:    std r29, -24(r1) # 8-byte Folded Spill2196; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill2197; SOFT-NEXT:    stdu r1, -64(r1)2198; SOFT-NEXT:    std r0, 80(r1)2199; SOFT-NEXT:    mr r30, r32200; SOFT-NEXT:    lhz r3, 0(r4)2201; SOFT-NEXT:    bl __extendhfsf22202; SOFT-NEXT:    nop2203; SOFT-NEXT:    mr r29, r32204; SOFT-NEXT:    extsw r3, r302205; SOFT-NEXT:    bl __floatsisf2206; SOFT-NEXT:    nop2207; SOFT-NEXT:    clrldi r3, r3, 322208; SOFT-NEXT:    bl __truncsfhf22209; SOFT-NEXT:    nop2210; SOFT-NEXT:    clrldi r3, r3, 482211; SOFT-NEXT:    bl __extendhfsf22212; SOFT-NEXT:    nop2213; SOFT-NEXT:    mr r4, r32214; SOFT-NEXT:    mr r3, r292215; SOFT-NEXT:    bl __addsf32216; SOFT-NEXT:    nop2217; SOFT-NEXT:    addi r1, r1, 642218; SOFT-NEXT:    ld r0, 16(r1)2219; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload2220; SOFT-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload2221; SOFT-NEXT:    mtlr r02222; SOFT-NEXT:    blr2223;2224; BE-LABEL: test_sitofp_fadd_i32:2225; BE:       # %bb.0:2226; BE-NEXT:    mflr r02227; BE-NEXT:    stdu r1, -144(r1)2228; BE-NEXT:    std r0, 160(r1)2229; BE-NEXT:    std r30, 120(r1) # 8-byte Folded Spill2230; BE-NEXT:    mr r30, r32231; BE-NEXT:    lhz r3, 0(r4)2232; BE-NEXT:    stfd f31, 136(r1) # 8-byte Folded Spill2233; BE-NEXT:    bl __extendhfsf22234; BE-NEXT:    nop2235; BE-NEXT:    extsw r3, r302236; BE-NEXT:    fmr f31, f12237; BE-NEXT:    std r3, 112(r1)2238; BE-NEXT:    lfd f0, 112(r1)2239; BE-NEXT:    fcfid f0, f02240; BE-NEXT:    frsp f1, f02241; BE-NEXT:    bl __truncsfhf22242; BE-NEXT:    nop2243; BE-NEXT:    clrldi r3, r3, 482244; BE-NEXT:    bl __extendhfsf22245; BE-NEXT:    nop2246; BE-NEXT:    fadds f1, f31, f12247; BE-NEXT:    lfd f31, 136(r1) # 8-byte Folded Reload2248; BE-NEXT:    ld r30, 120(r1) # 8-byte Folded Reload2249; BE-NEXT:    addi r1, r1, 1442250; BE-NEXT:    ld r0, 16(r1)2251; BE-NEXT:    mtlr r02252; BE-NEXT:    blr2253  %tmp0 = load half, ptr %b2254  %tmp1 = sitofp i32 %a to half2255  %tmp2 = fadd half %tmp0, %tmp12256  %tmp3 = fpext half %tmp2 to float2257  ret float %tmp32258}2259define half @PR40273(half) nounwind {2260; PPC32-LABEL: PR40273:2261; PPC32:       # %bb.0:2262; PPC32-NEXT:    mflr r02263; PPC32-NEXT:    stwu r1, -16(r1)2264; PPC32-NEXT:    stw r0, 20(r1)2265; PPC32-NEXT:    bl __truncsfhf22266; PPC32-NEXT:    clrlwi r3, r3, 162267; PPC32-NEXT:    bl __extendhfsf22268; PPC32-NEXT:    lis r3, .LCPI24_0@ha2269; PPC32-NEXT:    lfs f0, .LCPI24_0@l(r3)2270; PPC32-NEXT:    li r3, 02271; PPC32-NEXT:    fcmpu cr0, f1, f02272; PPC32-NEXT:    bc 12, eq, .LBB24_22273; PPC32-NEXT:  # %bb.1:2274; PPC32-NEXT:    li r3, 42275; PPC32-NEXT:  .LBB24_2:2276; PPC32-NEXT:    li r4, .LCPI24_1@l2277; PPC32-NEXT:    addis r4, r4, .LCPI24_1@ha2278; PPC32-NEXT:    lfsx f1, r4, r32279; PPC32-NEXT:    lwz r0, 20(r1)2280; PPC32-NEXT:    addi r1, r1, 162281; PPC32-NEXT:    mtlr r02282; PPC32-NEXT:    blr2283;2284; P8-LABEL: PR40273:2285; P8:       # %bb.0:2286; P8-NEXT:    mflr r02287; P8-NEXT:    stdu r1, -32(r1)2288; P8-NEXT:    std r0, 48(r1)2289; P8-NEXT:    bl __truncsfhf22290; P8-NEXT:    nop2291; P8-NEXT:    clrldi r3, r3, 482292; P8-NEXT:    bl __extendhfsf22293; P8-NEXT:    nop2294; P8-NEXT:    fmr f0, f12295; P8-NEXT:    xxlxor f1, f1, f12296; P8-NEXT:    fcmpu cr0, f0, f12297; P8-NEXT:    beq cr0, .LBB24_22298; P8-NEXT:  # %bb.1:2299; P8-NEXT:    vspltisw v2, 12300; P8-NEXT:    xvcvsxwdp vs1, vs342301; P8-NEXT:  .LBB24_2:2302; P8-NEXT:    addi r1, r1, 322303; P8-NEXT:    ld r0, 16(r1)2304; P8-NEXT:    mtlr r02305; P8-NEXT:    blr2306;2307; P9-LABEL: PR40273:2308; P9:       # %bb.0:2309; P9-NEXT:    xscvdphp f0, f12310; P9-NEXT:    xxlxor f1, f1, f12311; P9-NEXT:    mffprwz r3, f02312; P9-NEXT:    clrlwi r3, r3, 162313; P9-NEXT:    mtfprwz f0, r32314; P9-NEXT:    xscvhpdp f0, f02315; P9-NEXT:    fcmpu cr0, f0, f12316; P9-NEXT:    beqlr cr02317; P9-NEXT:  # %bb.1:2318; P9-NEXT:    vspltisw v2, 12319; P9-NEXT:    xvcvsxwdp vs1, vs342320; P9-NEXT:    blr2321;2322; SOFT-LABEL: PR40273:2323; SOFT:       # %bb.0:2324; SOFT-NEXT:    mflr r02325; SOFT-NEXT:    stdu r1, -32(r1)2326; SOFT-NEXT:    clrldi r3, r3, 482327; SOFT-NEXT:    std r0, 48(r1)2328; SOFT-NEXT:    bl __extendhfsf22329; SOFT-NEXT:    nop2330; SOFT-NEXT:    li r4, 02331; SOFT-NEXT:    bl __nesf22332; SOFT-NEXT:    nop2333; SOFT-NEXT:    cmplwi r3, 02334; SOFT-NEXT:    lis r3, 162562335; SOFT-NEXT:    iseleq r3, 0, r32336; SOFT-NEXT:    bl __truncsfhf22337; SOFT-NEXT:    nop2338; SOFT-NEXT:    addi r1, r1, 322339; SOFT-NEXT:    ld r0, 16(r1)2340; SOFT-NEXT:    mtlr r02341; SOFT-NEXT:    blr2342;2343; BE-LABEL: PR40273:2344; BE:       # %bb.0:2345; BE-NEXT:    mflr r02346; BE-NEXT:    stdu r1, -112(r1)2347; BE-NEXT:    std r0, 128(r1)2348; BE-NEXT:    bl __truncsfhf22349; BE-NEXT:    nop2350; BE-NEXT:    clrldi r3, r3, 482351; BE-NEXT:    bl __extendhfsf22352; BE-NEXT:    nop2353; BE-NEXT:    addis r3, r2, .LCPI24_0@toc@ha2354; BE-NEXT:    lfs f0, .LCPI24_0@toc@l(r3)2355; BE-NEXT:    li r3, 02356; BE-NEXT:    fcmpu cr0, f1, f02357; BE-NEXT:    bc 12, eq, .LBB24_22358; BE-NEXT:  # %bb.1:2359; BE-NEXT:    li r3, 42360; BE-NEXT:  .LBB24_2:2361; BE-NEXT:    addis r4, r2, .LCPI24_1@toc@ha2362; BE-NEXT:    addi r4, r4, .LCPI24_1@toc@l2363; BE-NEXT:    lfsx f1, r4, r32364; BE-NEXT:    addi r1, r1, 1122365; BE-NEXT:    ld r0, 16(r1)2366; BE-NEXT:    mtlr r02367; BE-NEXT:    blr2368  %2 = fcmp une half %0, 0xH00002369  %3 = uitofp i1 %2 to half2370  ret half %32371}2372 2373; Trivial operations shouldn't need a libcall2374 2375define half @fabs(half %x) nounwind {2376; PPC32-LABEL: fabs:2377; PPC32:       # %bb.0:2378; PPC32-NEXT:    mflr r02379; PPC32-NEXT:    stwu r1, -16(r1)2380; PPC32-NEXT:    stw r0, 20(r1)2381; PPC32-NEXT:    bl __truncsfhf22382; PPC32-NEXT:    clrlwi r3, r3, 162383; PPC32-NEXT:    bl __extendhfsf22384; PPC32-NEXT:    fabs f1, f12385; PPC32-NEXT:    lwz r0, 20(r1)2386; PPC32-NEXT:    addi r1, r1, 162387; PPC32-NEXT:    mtlr r02388; PPC32-NEXT:    blr2389;2390; P8-LABEL: fabs:2391; P8:       # %bb.0:2392; P8-NEXT:    mflr r02393; P8-NEXT:    stdu r1, -32(r1)2394; P8-NEXT:    std r0, 48(r1)2395; P8-NEXT:    bl __truncsfhf22396; P8-NEXT:    nop2397; P8-NEXT:    clrldi r3, r3, 482398; P8-NEXT:    bl __extendhfsf22399; P8-NEXT:    nop2400; P8-NEXT:    xsabsdp f1, f12401; P8-NEXT:    addi r1, r1, 322402; P8-NEXT:    ld r0, 16(r1)2403; P8-NEXT:    mtlr r02404; P8-NEXT:    blr2405;2406; P9-LABEL: fabs:2407; P9:       # %bb.0:2408; P9-NEXT:    xscvdphp f0, f12409; P9-NEXT:    mffprwz r3, f02410; P9-NEXT:    clrlwi r3, r3, 162411; P9-NEXT:    mtfprwz f0, r32412; P9-NEXT:    xscvhpdp f0, f02413; P9-NEXT:    xsabsdp f1, f02414; P9-NEXT:    blr2415;2416; SOFT-LABEL: fabs:2417; SOFT:       # %bb.0:2418; SOFT-NEXT:    clrldi r3, r3, 492419; SOFT-NEXT:    blr2420;2421; BE-LABEL: fabs:2422; BE:       # %bb.0:2423; BE-NEXT:    mflr r02424; BE-NEXT:    stdu r1, -112(r1)2425; BE-NEXT:    std r0, 128(r1)2426; BE-NEXT:    bl __truncsfhf22427; BE-NEXT:    nop2428; BE-NEXT:    clrldi r3, r3, 482429; BE-NEXT:    bl __extendhfsf22430; BE-NEXT:    nop2431; BE-NEXT:    fabs f1, f12432; BE-NEXT:    addi r1, r1, 1122433; BE-NEXT:    ld r0, 16(r1)2434; BE-NEXT:    mtlr r02435; BE-NEXT:    blr2436  %a = call half @llvm.fabs.f16(half %x)2437  ret half %a2438}2439 2440define half @fcopysign(half %x, half %y) nounwind {2441; PPC32-LABEL: fcopysign:2442; PPC32:       # %bb.0:2443; PPC32-NEXT:    mflr r02444; PPC32-NEXT:    stwu r1, -32(r1)2445; PPC32-NEXT:    stw r0, 36(r1)2446; PPC32-NEXT:    stfd f31, 24(r1) # 8-byte Folded Spill2447; PPC32-NEXT:    fmr f31, f22448; PPC32-NEXT:    bl __truncsfhf22449; PPC32-NEXT:    clrlwi r3, r3, 162450; PPC32-NEXT:    bl __extendhfsf22451; PPC32-NEXT:    stfs f31, 20(r1)2452; PPC32-NEXT:    lwz r3, 20(r1)2453; PPC32-NEXT:    srwi r3, r3, 312454; PPC32-NEXT:    andi. r3, r3, 12455; PPC32-NEXT:    bc 12, gt, .LBB26_22456; PPC32-NEXT:  # %bb.1:2457; PPC32-NEXT:    fabs f1, f12458; PPC32-NEXT:    b .LBB26_32459; PPC32-NEXT:  .LBB26_2:2460; PPC32-NEXT:    fnabs f1, f12461; PPC32-NEXT:  .LBB26_3:2462; PPC32-NEXT:    lfd f31, 24(r1) # 8-byte Folded Reload2463; PPC32-NEXT:    lwz r0, 36(r1)2464; PPC32-NEXT:    addi r1, r1, 322465; PPC32-NEXT:    mtlr r02466; PPC32-NEXT:    blr2467;2468; P8-LABEL: fcopysign:2469; P8:       # %bb.0:2470; P8-NEXT:    mflr r02471; P8-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill2472; P8-NEXT:    stdu r1, -48(r1)2473; P8-NEXT:    std r0, 64(r1)2474; P8-NEXT:    fmr f31, f22475; P8-NEXT:    bl __truncsfhf22476; P8-NEXT:    nop2477; P8-NEXT:    clrldi r3, r3, 482478; P8-NEXT:    bl __extendhfsf22479; P8-NEXT:    nop2480; P8-NEXT:    fcpsgn f1, f31, f12481; P8-NEXT:    addi r1, r1, 482482; P8-NEXT:    ld r0, 16(r1)2483; P8-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload2484; P8-NEXT:    mtlr r02485; P8-NEXT:    blr2486;2487; P9-LABEL: fcopysign:2488; P9:       # %bb.0:2489; P9-NEXT:    xscvdphp f0, f12490; P9-NEXT:    mffprwz r3, f02491; P9-NEXT:    clrlwi r3, r3, 162492; P9-NEXT:    mtfprwz f0, r32493; P9-NEXT:    xscvhpdp f0, f02494; P9-NEXT:    fcpsgn f1, f2, f02495; P9-NEXT:    blr2496;2497; SOFT-LABEL: fcopysign:2498; SOFT:       # %bb.0:2499; SOFT-NEXT:    mflr r02500; SOFT-NEXT:    std r30, -16(r1) # 8-byte Folded Spill2501; SOFT-NEXT:    stdu r1, -48(r1)2502; SOFT-NEXT:    clrldi r3, r3, 482503; SOFT-NEXT:    std r0, 64(r1)2504; SOFT-NEXT:    mr r30, r42505; SOFT-NEXT:    bl __extendhfsf22506; SOFT-NEXT:    nop2507; SOFT-NEXT:    rlwimi r3, r30, 16, 0, 02508; SOFT-NEXT:    clrldi r3, r3, 322509; SOFT-NEXT:    bl __truncsfhf22510; SOFT-NEXT:    nop2511; SOFT-NEXT:    addi r1, r1, 482512; SOFT-NEXT:    ld r0, 16(r1)2513; SOFT-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload2514; SOFT-NEXT:    mtlr r02515; SOFT-NEXT:    blr2516;2517; BE-LABEL: fcopysign:2518; BE:       # %bb.0:2519; BE-NEXT:    mflr r02520; BE-NEXT:    stdu r1, -128(r1)2521; BE-NEXT:    std r0, 144(r1)2522; BE-NEXT:    stfd f31, 120(r1) # 8-byte Folded Spill2523; BE-NEXT:    fmr f31, f22524; BE-NEXT:    bl __truncsfhf22525; BE-NEXT:    nop2526; BE-NEXT:    clrldi r3, r3, 482527; BE-NEXT:    bl __extendhfsf22528; BE-NEXT:    nop2529; BE-NEXT:    stfs f31, 116(r1)2530; BE-NEXT:    lwz r3, 116(r1)2531; BE-NEXT:    srwi r3, r3, 312532; BE-NEXT:    andi. r3, r3, 12533; BE-NEXT:    bc 12, gt, .LBB26_22534; BE-NEXT:  # %bb.1:2535; BE-NEXT:    fabs f1, f12536; BE-NEXT:    b .LBB26_32537; BE-NEXT:  .LBB26_2:2538; BE-NEXT:    fnabs f1, f12539; BE-NEXT:  .LBB26_3:2540; BE-NEXT:    lfd f31, 120(r1) # 8-byte Folded Reload2541; BE-NEXT:    addi r1, r1, 1282542; BE-NEXT:    ld r0, 16(r1)2543; BE-NEXT:    mtlr r02544; BE-NEXT:    blr2545  %a = call half @llvm.copysign.f16(half %x, half %y)2546  ret half %a2547}2548