222 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -relocation-model=pic -verify-machineinstrs -mcpu=pwr7 -mattr=+altivec -mattr=-vsx < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-n32:64"5target triple = "powerpc64le-unknown-linux-gnu"6 7@g = common global ppc_fp128 0xM00000000000000000000000000000000, align 168 9define void @callee(ppc_fp128 %x) {10; CHECK-LABEL: callee:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: addis 3, 2, .LC0@toc@ha13; CHECK-NEXT: stfd 2, -8(1)14; CHECK-NEXT: ld 3, .LC0@toc@l(3)15; CHECK-NEXT: stfd 1, -16(1)16; CHECK-NEXT: stfd 2, 8(3)17; CHECK-NEXT: stfd 1, 0(3)18; CHECK-NEXT: blr19entry:20 %x.addr = alloca ppc_fp128, align 1621 store ppc_fp128 %x, ptr %x.addr, align 1622 %0 = load ppc_fp128, ptr %x.addr, align 1623 store ppc_fp128 %0, ptr @g, align 1624 ret void25}26 27define void @caller() {28; CHECK-LABEL: caller:29; CHECK: # %bb.0: # %entry30; CHECK-NEXT: mflr 031; CHECK-NEXT: stdu 1, -32(1)32; CHECK-NEXT: std 0, 48(1)33; CHECK-NEXT: .cfi_def_cfa_offset 3234; CHECK-NEXT: .cfi_offset lr, 1635; CHECK-NEXT: addis 3, 2, .LC0@toc@ha36; CHECK-NEXT: ld 3, .LC0@toc@l(3)37; CHECK-NEXT: lfd 2, 8(3)38; CHECK-NEXT: lfd 1, 0(3)39; CHECK-NEXT: bl test40; CHECK-NEXT: nop41; CHECK-NEXT: addi 1, 1, 3242; CHECK-NEXT: ld 0, 16(1)43; CHECK-NEXT: mtlr 044; CHECK-NEXT: blr45entry:46 %0 = load ppc_fp128, ptr @g, align 1647 call void @test(ppc_fp128 %0)48 ret void49}50 51declare void @test(ppc_fp128)52 53define void @caller_const() {54; CHECK-LABEL: caller_const:55; CHECK: # %bb.0: # %entry56; CHECK-NEXT: mflr 057; CHECK-NEXT: stdu 1, -32(1)58; CHECK-NEXT: std 0, 48(1)59; CHECK-NEXT: .cfi_def_cfa_offset 3260; CHECK-NEXT: .cfi_offset lr, 1661; CHECK-NEXT: addis 3, 2, .LCPI2_0@toc@ha62; CHECK-NEXT: lfs 1, .LCPI2_0@toc@l(3)63; CHECK-NEXT: addis 3, 2, .LCPI2_1@toc@ha64; CHECK-NEXT: lfs 2, .LCPI2_1@toc@l(3)65; CHECK-NEXT: bl test66; CHECK-NEXT: nop67; CHECK-NEXT: addi 1, 1, 3268; CHECK-NEXT: ld 0, 16(1)69; CHECK-NEXT: mtlr 070; CHECK-NEXT: blr71entry:72 call void @test(ppc_fp128 0xM3FF00000000000000000000000000000)73 ret void74}75 76define ppc_fp128 @result() {77; CHECK-LABEL: result:78; CHECK: # %bb.0: # %entry79; CHECK-NEXT: addis 3, 2, .LC0@toc@ha80; CHECK-NEXT: ld 3, .LC0@toc@l(3)81; CHECK-NEXT: lfd 1, 0(3)82; CHECK-NEXT: lfd 2, 8(3)83; CHECK-NEXT: blr84entry:85 %0 = load ppc_fp128, ptr @g, align 1686 ret ppc_fp128 %087}88 89define void @use_result() {90; CHECK-LABEL: use_result:91; CHECK: # %bb.0: # %entry92; CHECK-NEXT: mflr 093; CHECK-NEXT: stdu 1, -32(1)94; CHECK-NEXT: std 0, 48(1)95; CHECK-NEXT: .cfi_def_cfa_offset 3296; CHECK-NEXT: .cfi_offset lr, 1697; CHECK-NEXT: bl test_result98; CHECK-NEXT: nop99; CHECK-NEXT: addis 3, 2, .LC0@toc@ha100; CHECK-NEXT: ld 3, .LC0@toc@l(3)101; CHECK-NEXT: stfd 2, 8(3)102; CHECK-NEXT: stfd 1, 0(3)103; CHECK-NEXT: addi 1, 1, 32104; CHECK-NEXT: ld 0, 16(1)105; CHECK-NEXT: mtlr 0106; CHECK-NEXT: blr107entry:108 %call = tail call ppc_fp128 @test_result() #3109 store ppc_fp128 %call, ptr @g, align 16110 ret void111}112 113declare ppc_fp128 @test_result()114 115define void @caller_result() {116; CHECK-LABEL: caller_result:117; CHECK: # %bb.0: # %entry118; CHECK-NEXT: mflr 0119; CHECK-NEXT: stdu 1, -32(1)120; CHECK-NEXT: std 0, 48(1)121; CHECK-NEXT: .cfi_def_cfa_offset 32122; CHECK-NEXT: .cfi_offset lr, 16123; CHECK-NEXT: bl test_result124; CHECK-NEXT: nop125; CHECK-NEXT: bl test126; CHECK-NEXT: nop127; CHECK-NEXT: addi 1, 1, 32128; CHECK-NEXT: ld 0, 16(1)129; CHECK-NEXT: mtlr 0130; CHECK-NEXT: blr131entry:132 %call = tail call ppc_fp128 @test_result()133 tail call void @test(ppc_fp128 %call)134 ret void135}136 137define i128 @convert_from(ppc_fp128 %x) {138; CHECK-LABEL: convert_from:139; CHECK: # %bb.0: # %entry140; CHECK-NEXT: stfd 1, -16(1)141; CHECK-NEXT: stfd 2, -8(1)142; CHECK-NEXT: ld 3, -16(1)143; CHECK-NEXT: ld 4, -8(1)144; CHECK-NEXT: blr145entry:146 %0 = bitcast ppc_fp128 %x to i128147 ret i128 %0148}149 150define ppc_fp128 @convert_to(i128 %x) {151; CHECK-LABEL: convert_to:152; CHECK: # %bb.0: # %entry153; CHECK-NEXT: std 3, -16(1)154; CHECK-NEXT: std 4, -8(1)155; CHECK-NEXT: lfd 1, -16(1)156; CHECK-NEXT: lfd 2, -8(1)157; CHECK-NEXT: blr158entry:159 %0 = bitcast i128 %x to ppc_fp128160 ret ppc_fp128 %0161}162 163define ppc_fp128 @convert_to2(i128 %x) {164; CHECK-LABEL: convert_to2:165; CHECK: # %bb.0: # %entry166; CHECK-NEXT: rotldi 5, 3, 1167; CHECK-NEXT: sldi 3, 3, 1168; CHECK-NEXT: rldimi 5, 4, 1, 0169; CHECK-NEXT: std 3, -16(1)170; CHECK-NEXT: lfd 1, -16(1)171; CHECK-NEXT: std 5, -8(1)172; CHECK-NEXT: lfd 2, -8(1)173; CHECK-NEXT: blr174entry:175 %shl = shl i128 %x, 1176 %0 = bitcast i128 %shl to ppc_fp128177 ret ppc_fp128 %0178}179 180 181define double @convert_vector(<4 x i32> %x) {182; CHECK-LABEL: convert_vector:183; CHECK: # %bb.0: # %entry184; CHECK-NEXT: addi 3, 1, -16185; CHECK-NEXT: stvx 2, 0, 3186; CHECK-NEXT: lfd 1, -16(1)187; CHECK-NEXT: blr188entry:189 %cast = bitcast <4 x i32> %x to ppc_fp128190 %conv = fptrunc ppc_fp128 %cast to double191 ret double %conv192}193 194declare void @llvm.va_start(ptr)195 196define double @vararg(i32 %a, ...) {197; CHECK-LABEL: vararg:198; CHECK: # %bb.0: # %entry199; CHECK-NEXT: addi 3, 1, 55200; CHECK-NEXT: std 4, 40(1)201; CHECK-NEXT: std 5, 48(1)202; CHECK-NEXT: std 6, 56(1)203; CHECK-NEXT: rldicr 3, 3, 0, 59204; CHECK-NEXT: std 7, 64(1)205; CHECK-NEXT: std 8, 72(1)206; CHECK-NEXT: std 9, 80(1)207; CHECK-NEXT: ori 4, 3, 8208; CHECK-NEXT: std 10, 88(1)209; CHECK-NEXT: std 4, -8(1)210; CHECK-NEXT: lfd 1, 0(3)211; CHECK-NEXT: addi 3, 3, 16212; CHECK-NEXT: std 3, -8(1)213; CHECK-NEXT: blr214entry:215 %va = alloca ptr, align 8216 call void @llvm.va_start(ptr %va)217 %arg = va_arg ptr %va, ppc_fp128218 %conv = fptrunc ppc_fp128 %arg to double219 ret double %conv220}221 222