243 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX323; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX644; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=LE5 6define ptr @main() #0 {7; AIX32-LABEL: main:8; AIX32: # %bb.0: # %entry9; AIX32-NEXT: stwu 1, -32(1)10; AIX32-NEXT: mr 3, 111; AIX32-NEXT: addi 1, 1, 3212; AIX32-NEXT: blr13;14; AIX64-LABEL: main:15; AIX64: # %bb.0: # %entry16; AIX64-NEXT: stdu 1, -48(1)17; AIX64-NEXT: mr 3, 118; AIX64-NEXT: addi 1, 1, 4819; AIX64-NEXT: blr20;21; LE-LABEL: main:22; LE: # %bb.0: # %entry23; LE-NEXT: stdu 1, -32(1)24; LE-NEXT: mr 3, 125; LE-NEXT: addi 1, 1, 3226; LE-NEXT: blr27entry:28 %0 = call ptr @llvm.frameaddress(i32 0)29 ret ptr %030}31 32define ptr @foo_naked() #3 { ; naked33; AIX32-LABEL: foo_naked:34; AIX32: # %bb.0: # %entry35; AIX32-NEXT: lwz 3, 0(1)36; AIX32-NEXT: blr37;38; AIX64-LABEL: foo_naked:39; AIX64: # %bb.0: # %entry40; AIX64-NEXT: ld 3, 0(1)41; AIX64-NEXT: blr42;43; LE-LABEL: foo_naked:44; LE: # %bb.0: # %entry45; LE-NEXT: ld 3, 0(1)46; LE-NEXT: blr47entry:48 %0 = call ptr @llvm.frameaddress(i32 1)49 ret ptr %050}51 52define ptr @foo1() #0 {53; AIX32-LABEL: foo1:54; AIX32: # %bb.0: # %entry55; AIX32-NEXT: stwu 1, -32(1)56; AIX32-NEXT: lwz 3, 0(1)57; AIX32-NEXT: addi 1, 1, 3258; AIX32-NEXT: blr59;60; AIX64-LABEL: foo1:61; AIX64: # %bb.0: # %entry62; AIX64-NEXT: stdu 1, -48(1)63; AIX64-NEXT: ld 3, 0(1)64; AIX64-NEXT: addi 1, 1, 4865; AIX64-NEXT: blr66;67; LE-LABEL: foo1:68; LE: # %bb.0: # %entry69; LE-NEXT: stdu 1, -32(1)70; LE-NEXT: ld 3, 0(1)71; LE-NEXT: addi 1, 1, 3272; LE-NEXT: blr73entry:74 %0 = call ptr @llvm.frameaddress(i32 1)75 ret ptr %076}77 78define ptr @foo2() #0 {79; AIX32-LABEL: foo2:80; AIX32: # %bb.0: # %entry81; AIX32-NEXT: stwu 1, -32(1)82; AIX32-NEXT: lwz 3, 0(1)83; AIX32-NEXT: lwz 3, 0(3)84; AIX32-NEXT: addi 1, 1, 3285; AIX32-NEXT: blr86;87; AIX64-LABEL: foo2:88; AIX64: # %bb.0: # %entry89; AIX64-NEXT: stdu 1, -48(1)90; AIX64-NEXT: ld 3, 0(1)91; AIX64-NEXT: ld 3, 0(3)92; AIX64-NEXT: addi 1, 1, 4893; AIX64-NEXT: blr94;95; LE-LABEL: foo2:96; LE: # %bb.0: # %entry97; LE-NEXT: stdu 1, -32(1)98; LE-NEXT: ld 3, 0(1)99; LE-NEXT: ld 3, 0(3)100; LE-NEXT: addi 1, 1, 32101; LE-NEXT: blr102entry:103 %0 = call ptr @llvm.frameaddress(i32 2)104 ret ptr %0105}106 107define ptr @bar0() #0 {108; AIX32-LABEL: bar0:109; AIX32: # %bb.0: # %entry110; AIX32-NEXT: mflr 0111; AIX32-NEXT: stw 31, -4(1)112; AIX32-NEXT: stw 0, 8(1)113; AIX32-NEXT: lis 0, -2114; AIX32-NEXT: ori 0, 0, 31008115; AIX32-NEXT: stwux 1, 1, 0116; AIX32-NEXT: mr 31, 1117; AIX32-NEXT: addi 3, 31, 60118; AIX32-NEXT: bl .use[PR]119; AIX32-NEXT: nop120; AIX32-NEXT: mr 3, 31121; AIX32-NEXT: lwz 1, 0(1)122; AIX32-NEXT: lwz 0, 8(1)123; AIX32-NEXT: lwz 31, -4(1)124; AIX32-NEXT: mtlr 0125; AIX32-NEXT: blr126;127; AIX64-LABEL: bar0:128; AIX64: # %bb.0: # %entry129; AIX64-NEXT: mflr 0130; AIX64-NEXT: std 31, -8(1)131; AIX64-NEXT: std 0, 16(1)132; AIX64-NEXT: lis 0, -2133; AIX64-NEXT: ori 0, 0, 30944134; AIX64-NEXT: stdux 1, 1, 0135; AIX64-NEXT: mr 31, 1136; AIX64-NEXT: addi 3, 31, 120137; AIX64-NEXT: bl .use[PR]138; AIX64-NEXT: nop139; AIX64-NEXT: mr 3, 31140; AIX64-NEXT: ld 1, 0(1)141; AIX64-NEXT: ld 0, 16(1)142; AIX64-NEXT: ld 31, -8(1)143; AIX64-NEXT: mtlr 0144; AIX64-NEXT: blr145;146; LE-LABEL: bar0:147; LE: # %bb.0: # %entry148; LE-NEXT: mflr 0149; LE-NEXT: std 31, -8(1)150; LE-NEXT: std 0, 16(1)151; LE-NEXT: lis 0, -2152; LE-NEXT: ori 0, 0, 31024153; LE-NEXT: stdux 1, 1, 0154; LE-NEXT: mr 31, 1155; LE-NEXT: addi 3, 31, 40156; LE-NEXT: bl use157; LE-NEXT: nop158; LE-NEXT: mr 3, 31159; LE-NEXT: ld 1, 0(1)160; LE-NEXT: ld 0, 16(1)161; LE-NEXT: ld 31, -8(1)162; LE-NEXT: mtlr 0163; LE-NEXT: blr164entry:165 %x = alloca [100000 x i8] ; <ptr> [#uses=1]166 call void @use(ptr %x) nounwind167 %0 = call ptr @llvm.frameaddress(i32 0)168 ret ptr %0169}170 171define ptr @bar1() #0 {172; AIX32-LABEL: bar1:173; AIX32: # %bb.0: # %entry174; AIX32-NEXT: mflr 0175; AIX32-NEXT: stw 31, -4(1)176; AIX32-NEXT: stw 0, 8(1)177; AIX32-NEXT: lis 0, -2178; AIX32-NEXT: ori 0, 0, 31008179; AIX32-NEXT: stwux 1, 1, 0180; AIX32-NEXT: mr 31, 1181; AIX32-NEXT: addi 3, 31, 60182; AIX32-NEXT: bl .use[PR]183; AIX32-NEXT: nop184; AIX32-NEXT: lwz 3, 0(31)185; AIX32-NEXT: lwz 1, 0(1)186; AIX32-NEXT: lwz 0, 8(1)187; AIX32-NEXT: lwz 31, -4(1)188; AIX32-NEXT: mtlr 0189; AIX32-NEXT: blr190;191; AIX64-LABEL: bar1:192; AIX64: # %bb.0: # %entry193; AIX64-NEXT: mflr 0194; AIX64-NEXT: std 31, -8(1)195; AIX64-NEXT: std 0, 16(1)196; AIX64-NEXT: lis 0, -2197; AIX64-NEXT: ori 0, 0, 30944198; AIX64-NEXT: stdux 1, 1, 0199; AIX64-NEXT: mr 31, 1200; AIX64-NEXT: addi 3, 31, 120201; AIX64-NEXT: bl .use[PR]202; AIX64-NEXT: nop203; AIX64-NEXT: ld 3, 0(31)204; AIX64-NEXT: ld 1, 0(1)205; AIX64-NEXT: ld 0, 16(1)206; AIX64-NEXT: ld 31, -8(1)207; AIX64-NEXT: mtlr 0208; AIX64-NEXT: blr209;210; LE-LABEL: bar1:211; LE: # %bb.0: # %entry212; LE-NEXT: mflr 0213; LE-NEXT: std 31, -8(1)214; LE-NEXT: std 0, 16(1)215; LE-NEXT: lis 0, -2216; LE-NEXT: ori 0, 0, 31024217; LE-NEXT: stdux 1, 1, 0218; LE-NEXT: mr 31, 1219; LE-NEXT: addi 3, 31, 40220; LE-NEXT: bl use221; LE-NEXT: nop222; LE-NEXT: ld 3, 0(31)223; LE-NEXT: ld 1, 0(1)224; LE-NEXT: ld 0, 16(1)225; LE-NEXT: ld 31, -8(1)226; LE-NEXT: mtlr 0227; LE-NEXT: blr228entry:229 %x = alloca [100000 x i8] ; <ptr> [#uses=1]230 call void @use(ptr %x) nounwind231 %0 = call ptr @llvm.frameaddress(i32 1)232 ret ptr %0233}234 235declare void @use(ptr)236 237declare ptr @llvm.frameaddress(i32) #2238 239attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "use-soft-float"="false" }240attributes #1 = { noreturn nounwind }241attributes #2 = { nounwind readnone }242attributes #3 = { nounwind naked "less-precise-fpmad"="false" "frame-pointer"="non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "use-soft-float"="false" }243