brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · b3a7ec9 Raw
168 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64 -sink-insts-to-avoid-spills | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5 6@A = external dso_local global [100 x i32], align 47 8define i32 @sink_load_and_copy(i32 %n) {9; CHECK-LABEL: sink_load_and_copy:10; CHECK:       // %bb.0: // %entry11; CHECK-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill12; CHECK-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill13; CHECK-NEXT:    .cfi_def_cfa_offset 3214; CHECK-NEXT:    .cfi_offset w19, -815; CHECK-NEXT:    .cfi_offset w20, -1616; CHECK-NEXT:    .cfi_offset w21, -2417; CHECK-NEXT:    .cfi_offset w30, -3218; CHECK-NEXT:    mov w19, w019; CHECK-NEXT:    cmp w0, #120; CHECK-NEXT:    b.lt .LBB0_321; CHECK-NEXT:  // %bb.1: // %for.body.preheader22; CHECK-NEXT:    adrp x8, A23; CHECK-NEXT:    mov w21, w1924; CHECK-NEXT:    ldr w20, [x8, :lo12:A]25; CHECK-NEXT:  .LBB0_2: // %for.body26; CHECK-NEXT:    // =>This Inner Loop Header: Depth=127; CHECK-NEXT:    mov w0, w2028; CHECK-NEXT:    bl _Z3usei29; CHECK-NEXT:    sdiv w19, w19, w030; CHECK-NEXT:    subs w21, w21, #131; CHECK-NEXT:    b.ne .LBB0_232; CHECK-NEXT:  .LBB0_3: // %for.cond.cleanup33; CHECK-NEXT:    mov w0, w1934; CHECK-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload35; CHECK-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload36; CHECK-NEXT:    ret37entry:38  %cmp63 = icmp sgt i32 %n, 039  br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup40 41for.body.preheader:42  %0 = load i32, ptr @A, align 443  br label %for.body44 45for.cond.cleanup:46  %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]47  ret i32 %sum.0.lcssa48 49for.body:50  %lsr.iv = phi i32 [ %n, %for.body.preheader ], [ %lsr.iv.next, %for.body ]51  %sum.065 = phi i32 [ %div, %for.body ], [ %n, %for.body.preheader ]52  %call = tail call i32 @_Z3usei(i32 %0)53  %div = sdiv i32 %sum.065, %call54  %lsr.iv.next = add i32 %lsr.iv, -155  %exitcond.not = icmp eq i32 %lsr.iv.next, 056  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body57}58 59define i32 @cant_sink_successive_call(i32 %n) {60; CHECK-LABEL: cant_sink_successive_call:61; CHECK:       // %bb.0: // %entry62; CHECK-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill63; CHECK-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill64; CHECK-NEXT:    .cfi_def_cfa_offset 3265; CHECK-NEXT:    .cfi_offset w19, -866; CHECK-NEXT:    .cfi_offset w20, -1667; CHECK-NEXT:    .cfi_offset w21, -2468; CHECK-NEXT:    .cfi_offset w30, -3269; CHECK-NEXT:    mov w19, w070; CHECK-NEXT:    cmp w0, #171; CHECK-NEXT:    b.lt .LBB1_372; CHECK-NEXT:  // %bb.1: // %for.body.preheader73; CHECK-NEXT:    adrp x8, A74; CHECK-NEXT:    mov w0, w1975; CHECK-NEXT:    ldr w20, [x8, :lo12:A]76; CHECK-NEXT:    bl _Z3usei77; CHECK-NEXT:    mov w21, w1978; CHECK-NEXT:  .LBB1_2: // %for.body79; CHECK-NEXT:    // =>This Inner Loop Header: Depth=180; CHECK-NEXT:    mov w0, w2081; CHECK-NEXT:    bl _Z3usei82; CHECK-NEXT:    sdiv w19, w19, w083; CHECK-NEXT:    subs w21, w21, #184; CHECK-NEXT:    b.ne .LBB1_285; CHECK-NEXT:  .LBB1_3: // %for.cond.cleanup86; CHECK-NEXT:    mov w0, w1987; CHECK-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload88; CHECK-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload89; CHECK-NEXT:    ret90entry:91  %cmp63 = icmp sgt i32 %n, 092  br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup93 94for.body.preheader:95  %0 = load i32, ptr @A, align 496  %call0 = tail call i32 @_Z3usei(i32 %n)97  br label %for.body98 99for.cond.cleanup:100  %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]101  ret i32 %sum.0.lcssa102 103for.body:104  %lsr.iv = phi i32 [ %n, %for.body.preheader ], [ %lsr.iv.next, %for.body ]105  %sum.065 = phi i32 [ %div, %for.body ], [ %n, %for.body.preheader ]106  %call = tail call i32 @_Z3usei(i32 %0)107  %div = sdiv i32 %sum.065, %call108  %lsr.iv.next = add i32 %lsr.iv, -1109  %exitcond.not = icmp eq i32 %lsr.iv.next, 0110  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body111}112 113define i32 @cant_sink_successive_store(ptr nocapture readnone %store, i32 %n) {114; CHECK-LABEL: cant_sink_successive_store:115; CHECK:       // %bb.0: // %entry116; CHECK-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill117; CHECK-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill118; CHECK-NEXT:    .cfi_def_cfa_offset 32119; CHECK-NEXT:    .cfi_offset w19, -8120; CHECK-NEXT:    .cfi_offset w20, -16121; CHECK-NEXT:    .cfi_offset w21, -24122; CHECK-NEXT:    .cfi_offset w30, -32123; CHECK-NEXT:    mov w19, w1124; CHECK-NEXT:    cmp w1, #1125; CHECK-NEXT:    b.lt .LBB2_3126; CHECK-NEXT:  // %bb.1: // %for.body.preheader127; CHECK-NEXT:    adrp x8, A128; CHECK-NEXT:    mov w21, w19129; CHECK-NEXT:    ldr w20, [x8, :lo12:A]130; CHECK-NEXT:    mov w8, #42 // =0x2a131; CHECK-NEXT:    str w8, [x0]132; CHECK-NEXT:  .LBB2_2: // %for.body133; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1134; CHECK-NEXT:    mov w0, w20135; CHECK-NEXT:    bl _Z3usei136; CHECK-NEXT:    sdiv w19, w19, w0137; CHECK-NEXT:    subs w21, w21, #1138; CHECK-NEXT:    b.ne .LBB2_2139; CHECK-NEXT:  .LBB2_3: // %for.cond.cleanup140; CHECK-NEXT:    mov w0, w19141; CHECK-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload142; CHECK-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload143; CHECK-NEXT:    ret144entry:145  %cmp63 = icmp sgt i32 %n, 0146  br i1 %cmp63, label %for.body.preheader, label %for.cond.cleanup147 148for.body.preheader:149  %0 = load i32, ptr @A, align 4150  store i32 42, ptr %store, align 4151  br label %for.body152 153for.cond.cleanup:154  %sum.0.lcssa = phi i32 [ %n, %entry ], [ %div, %for.body ]155  ret i32 %sum.0.lcssa156 157for.body:158  %lsr.iv = phi i32 [ %n, %for.body.preheader ], [ %lsr.iv.next, %for.body ]159  %sum.065 = phi i32 [ %div, %for.body ], [ %n, %for.body.preheader ]160  %call = tail call i32 @_Z3usei(i32 %0)161  %div = sdiv i32 %sum.065, %call162  %lsr.iv.next = add i32 %lsr.iv, -1163  %exitcond.not = icmp eq i32 %lsr.iv.next, 0164  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body165}166 167declare i32 @_Z3usei(i32)168