1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -frame-pointer=all -mtriple=m68k %s -verify-machineinstrs -o - \ 3; RUN: | FileCheck --check-prefix=FP %s 4 5; RUN: llc -frame-pointer=none -mtriple=m68k %s -verify-machineinstrs -o - \ 6; RUN: | FileCheck --check-prefix=NO-FP %s 7 8define i32 @fib(i32 %a, i32 %b) { 9; FP-LABEL: fib: 10; FP: .cfi_startproc 11; FP-NEXT: ; %bb.0: ; %entry 12; FP-NEXT: link.w %a6, #-32 13; FP-NEXT: .cfi_def_cfa_offset -8 14; FP-NEXT: .cfi_offset %a6, -8 15; FP-NEXT: .cfi_def_cfa_register %a6 16; FP-NEXT: move.l (8,%a6), %d1 17; FP-NEXT: move.l %d1, (-32,%a6) 18; FP-NEXT: move.l (12,%a6), %d0 19; FP-NEXT: add.l %d0, %d1 20; FP-NEXT: move.l %d0, (-28,%a6) 21; FP-NEXT: add.l %d1, %d0 22; FP-NEXT: move.l %d1, (-24,%a6) 23; FP-NEXT: add.l %d0, %d1 24; FP-NEXT: move.l %d0, (-20,%a6) 25; FP-NEXT: move.l %d1, (-16,%a6) 26; FP-NEXT: add.l %d1, %d0 27; FP-NEXT: move.l %d0, (-12,%a6) 28; FP-NEXT: add.l %d0, %d1 29; FP-NEXT: move.l %d1, (-8,%a6) 30; FP-NEXT: add.l %d1, %d0 31; FP-NEXT: move.l %d0, (-4,%a6) 32; FP-NEXT: unlk %a6 33; FP-NEXT: rts 34; 35; NO-FP-LABEL: fib: 36; NO-FP: .cfi_startproc 37; NO-FP-NEXT: ; %bb.0: ; %entry 38; NO-FP-NEXT: suba.l #32, %sp 39; NO-FP-NEXT: .cfi_def_cfa_offset -36 40; NO-FP-NEXT: move.l (36,%sp), %d1 41; NO-FP-NEXT: move.l %d1, (0,%sp) 42; NO-FP-NEXT: move.l (40,%sp), %d0 43; NO-FP-NEXT: add.l %d0, %d1 44; NO-FP-NEXT: move.l %d0, (4,%sp) 45; NO-FP-NEXT: add.l %d1, %d0 46; NO-FP-NEXT: move.l %d1, (8,%sp) 47; NO-FP-NEXT: add.l %d0, %d1 48; NO-FP-NEXT: move.l %d0, (12,%sp) 49; NO-FP-NEXT: move.l %d1, (16,%sp) 50; NO-FP-NEXT: add.l %d1, %d0 51; NO-FP-NEXT: move.l %d0, (20,%sp) 52; NO-FP-NEXT: add.l %d0, %d1 53; NO-FP-NEXT: move.l %d1, (24,%sp) 54; NO-FP-NEXT: add.l %d1, %d0 55; NO-FP-NEXT: move.l %d0, (28,%sp) 56; NO-FP-NEXT: adda.l #32, %sp 57; NO-FP-NEXT: rts 58entry: 59 %arr = alloca [8 x i32], align 4 60 %s0 = getelementptr i32, ptr %arr, i32 0 61 %s1 = getelementptr i32, ptr %arr, i32 1 62 store i32 %a, ptr %s0 63 store i32 %b, ptr %s1 64 65 %ptr0 = getelementptr i32, ptr %arr, i32 0 66 %ptr1 = getelementptr i32, ptr %arr, i32 1 67 %ptr2 = getelementptr i32, ptr %arr, i32 2 68 %ptr3 = getelementptr i32, ptr %arr, i32 3 69 %ptr4 = getelementptr i32, ptr %arr, i32 4 70 %ptr5 = getelementptr i32, ptr %arr, i32 5 71 %ptr6 = getelementptr i32, ptr %arr, i32 6 72 %ptr7 = getelementptr i32, ptr %arr, i32 7 73 74 %res0 = load i32, ptr %ptr0 75 %res1 = load i32, ptr %ptr1 76 77 %res2 = add i32 %res0, %res1 78 store i32 %res2, ptr %ptr2 79 80 %res3 = add i32 %res1, %res2 81 store i32 %res3, ptr %ptr3 82 83 %res4 = add i32 %res2, %res3 84 store i32 %res4, ptr %ptr4 85 86 %res5 = add i32 %res3, %res4 87 store i32 %res5, ptr %ptr5 88 89 %res6 = add i32 %res4, %res5 90 store i32 %res6, ptr %ptr6 91 92 %res7 = add i32 %res5, %res6 93 store i32 %res7, ptr %ptr7 94 95 ret i32 %res7 96} 97 98define i32 @test_gep() { 99; FP-LABEL: test_gep: 100; FP: .cfi_startproc 101; FP-NEXT: ; %bb.0: ; %entry 102; FP-NEXT: link.w %a6, #-256 103; FP-NEXT: .cfi_def_cfa_offset -8 104; FP-NEXT: .cfi_offset %a6, -8 105; FP-NEXT: .cfi_def_cfa_register %a6 106; FP-NEXT: move.l #21, (-4,%a6) 107; FP-NEXT: move.l #12, (-256,%a6) 108; FP-NEXT: moveq #0, %d0 109; FP-NEXT: unlk %a6 110; FP-NEXT: rts 111; 112; NO-FP-LABEL: test_gep: 113; NO-FP: .cfi_startproc 114; NO-FP-NEXT: ; %bb.0: ; %entry 115; NO-FP-NEXT: suba.l #256, %sp 116; NO-FP-NEXT: .cfi_def_cfa_offset -260 117; NO-FP-NEXT: move.l #21, (252,%sp) 118; NO-FP-NEXT: move.l #12, (0,%sp) 119; NO-FP-NEXT: moveq #0, %d0 120; NO-FP-NEXT: adda.l #256, %sp 121; NO-FP-NEXT: rts 122entry: 123 %arr = alloca [8 x [8 x i32]] 124 %ptr1 = getelementptr [8 x i32], ptr %arr, i64 0, i64 0 125 store i32 12, ptr %ptr1 126 %ptr2 = getelementptr [8 x i32], ptr %arr, i64 7, i64 7 127 store i32 21, ptr %ptr2 128 ret i32 0 129} 130