1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \ 3; RUN: -mtriple=powerpc-ibm-aix-xcoff | \ 4; RUN: FileCheck %s -check-prefix=AIX32 5 6; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \ 7; RUN: -mtriple=powerpc64-ibm-aix-xcoff | \ 8; RUN: FileCheck %s -check-prefixes=AIX64 9 10declare void @clobber(ptr) 11 12define dso_local float @frameptr_only(i32 %n, float %f) { 13; AIX32-LABEL: frameptr_only: 14; AIX32: # %bb.0: # %entry 15; AIX32-NEXT: mflr 0 16; AIX32-NEXT: stw 31, -12(1) 17; AIX32-NEXT: stwu 1, -80(1) 18; AIX32-NEXT: slwi 3, 3, 2 19; AIX32-NEXT: mr 31, 1 20; AIX32-NEXT: stw 0, 88(1) 21; AIX32-NEXT: addi 3, 3, 15 22; AIX32-NEXT: addi 4, 31, 80 23; AIX32-NEXT: stfd 31, 72(31) # 8-byte Folded Spill 24; AIX32-NEXT: fmr 31, 1 25; AIX32-NEXT: rlwinm 3, 3, 0, 0, 27 26; AIX32-NEXT: neg 3, 3 27; AIX32-NEXT: stwux 4, 1, 3 28; AIX32-NEXT: addi 3, 1, 64 29; AIX32-NEXT: bl .clobber[PR] 30; AIX32-NEXT: nop 31; AIX32-NEXT: fmr 1, 31 32; AIX32-NEXT: lfd 31, 72(31) # 8-byte Folded Reload 33; AIX32-NEXT: lwz 1, 0(1) 34; AIX32-NEXT: lwz 0, 8(1) 35; AIX32-NEXT: mtlr 0 36; AIX32-NEXT: lwz 31, -12(1) 37; AIX32-NEXT: blr 38; 39; AIX64-LABEL: frameptr_only: 40; AIX64: # %bb.0: # %entry 41; AIX64-NEXT: mflr 0 42; AIX64-NEXT: std 31, -16(1) 43; AIX64-NEXT: stdu 1, -144(1) 44; AIX64-NEXT: rldic 3, 3, 2, 30 45; AIX64-NEXT: mr 31, 1 46; AIX64-NEXT: std 0, 160(1) 47; AIX64-NEXT: addi 3, 3, 15 48; AIX64-NEXT: addi 4, 31, 144 49; AIX64-NEXT: stfd 31, 136(31) # 8-byte Folded Spill 50; AIX64-NEXT: fmr 31, 1 51; AIX64-NEXT: rldicl 3, 3, 60, 4 52; AIX64-NEXT: rldicl 3, 3, 4, 29 53; AIX64-NEXT: neg 3, 3 54; AIX64-NEXT: stdux 4, 1, 3 55; AIX64-NEXT: addi 3, 1, 112 56; AIX64-NEXT: bl .clobber[PR] 57; AIX64-NEXT: nop 58; AIX64-NEXT: fmr 1, 31 59; AIX64-NEXT: lfd 31, 136(31) # 8-byte Folded Reload 60; AIX64-NEXT: ld 1, 0(1) 61; AIX64-NEXT: ld 0, 16(1) 62; AIX64-NEXT: mtlr 0 63; AIX64-NEXT: ld 31, -16(1) 64; AIX64-NEXT: blr 65entry: 66 %0 = alloca i32, i32 %n 67 call void @clobber(ptr %0) 68 ret float %f 69} 70 71define dso_local void @frameptr_realigned(i32 %n) { 72; AIX32-LABEL: frameptr_realigned: 73; AIX32: # %bb.0: 74; AIX32-NEXT: mflr 0 75; AIX32-NEXT: stw 31, -4(1) 76; AIX32-NEXT: stw 30, -8(1) 77; AIX32-NEXT: mr 30, 1 78; AIX32-NEXT: stw 0, 8(1) 79; AIX32-NEXT: clrlwi 0, 1, 26 80; AIX32-NEXT: subfic 0, 0, -192 81; AIX32-NEXT: stwux 1, 1, 0 82; AIX32-NEXT: slwi 3, 3, 2 83; AIX32-NEXT: lwz 4, 0(1) 84; AIX32-NEXT: li 5, -64 85; AIX32-NEXT: addi 3, 3, 15 86; AIX32-NEXT: mr 31, 1 87; AIX32-NEXT: rlwinm 3, 3, 0, 0, 27 88; AIX32-NEXT: neg 3, 3 89; AIX32-NEXT: and 5, 3, 5 90; AIX32-NEXT: stwux 4, 1, 5 91; AIX32-NEXT: addi 3, 1, 64 92; AIX32-NEXT: bl .clobber[PR] 93; AIX32-NEXT: nop 94; AIX32-NEXT: mr 1, 30 95; AIX32-NEXT: lwz 0, 8(1) 96; AIX32-NEXT: mtlr 0 97; AIX32-NEXT: lwz 31, -4(1) 98; AIX32-NEXT: lwz 30, -8(1) 99; AIX32-NEXT: blr 100; 101; AIX64-LABEL: frameptr_realigned: 102; AIX64: # %bb.0: 103; AIX64-NEXT: mflr 0 104; AIX64-NEXT: std 31, -8(1) 105; AIX64-NEXT: std 30, -16(1) 106; AIX64-NEXT: mr 30, 1 107; AIX64-NEXT: std 0, 16(1) 108; AIX64-NEXT: clrldi 0, 1, 58 109; AIX64-NEXT: subfic 0, 0, -256 110; AIX64-NEXT: stdux 1, 1, 0 111; AIX64-NEXT: rldic 3, 3, 2, 30 112; AIX64-NEXT: ld 4, 0(1) 113; AIX64-NEXT: li 5, -64 114; AIX64-NEXT: addi 3, 3, 15 115; AIX64-NEXT: mr 31, 1 116; AIX64-NEXT: rldicl 3, 3, 60, 4 117; AIX64-NEXT: rldicl 3, 3, 4, 29 118; AIX64-NEXT: neg 3, 3 119; AIX64-NEXT: and 5, 3, 5 120; AIX64-NEXT: stdux 4, 1, 5 121; AIX64-NEXT: addi 3, 1, 128 122; AIX64-NEXT: bl .clobber[PR] 123; AIX64-NEXT: nop 124; AIX64-NEXT: mr 1, 30 125; AIX64-NEXT: ld 0, 16(1) 126; AIX64-NEXT: mtlr 0 127; AIX64-NEXT: ld 31, -8(1) 128; AIX64-NEXT: ld 30, -16(1) 129; AIX64-NEXT: blr 130 %ptr = alloca i32, i32 %n, align 64 131 call void @clobber(ptr %ptr) 132 ret void 133} 134