brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 8b58ba6 Raw
201 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -o - %s | FileCheck %s3 4target triple = "arm64-apple-ios"5 6%struct.s = type {double, double }7 8declare void @fn(ptr, ptr)9 10; %l.a and %l.b read memory allocated in the caller and should not block11; shrink-wrapping.12define void @test_regular_pointers(ptr %a, ptr %b) {13; CHECK-LABEL: test_regular_pointers:14; CHECK:       ; %bb.0: ; %entry15; CHECK-NEXT:    ldr d0, [x0]16; CHECK-NEXT:    ldr d1, [x1, #8]17; CHECK-NEXT:    mov x8, #1 ; =0x118; CHECK-NEXT:    movk x8, #2047, lsl #1619; CHECK-NEXT:    fadd d0, d0, d120; CHECK-NEXT:    fmov d1, x821; CHECK-NEXT:    fcmp d0, d122; CHECK-NEXT:    str d0, [x1]23; CHECK-NEXT:    b.mi LBB0_224; CHECK-NEXT:    b.gt LBB0_225; CHECK-NEXT:  ; %bb.1: ; %then26; CHECK-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill27; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill28; CHECK-NEXT:    .cfi_def_cfa_offset 3229; CHECK-NEXT:    .cfi_offset w30, -830; CHECK-NEXT:    .cfi_offset w29, -1631; CHECK-NEXT:    .cfi_offset w19, -2432; CHECK-NEXT:    .cfi_offset w20, -3233; CHECK-NEXT:    mov x19, x134; CHECK-NEXT:    bl _fn35; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload36; CHECK-NEXT:    str xzr, [x19]37; CHECK-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload38; CHECK-NEXT:  LBB0_2: ; %exit39; CHECK-NEXT:    ret40entry:41  %l.a = load double, ptr %a, align 842  %gep.b = getelementptr inbounds %struct.s, ptr %b, i64 0, i32 143  %l.b = load double, ptr %gep.b, align 844  %add = fadd double %l.a, %l.b45  store double %add, ptr %b, align 846  %c = fcmp ueq double %add, 0x7FF000147  br i1 %c, label %then, label %exit48 49then:50  tail call void @fn(ptr %a, ptr %b)51  store double 0.000000e+00, ptr %b, align 852  br label %exit53 54exit:55  ret void56}57 58; %l.b may read memory from the callee's stack due to byval.59define void @test_byval_pointers(ptr %a, ptr byval(%struct.s) %b) {60; CHECK-LABEL: test_byval_pointers:61; CHECK:       ; %bb.0: ; %entry62; CHECK-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill63; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill64; CHECK-NEXT:    .cfi_def_cfa_offset 3265; CHECK-NEXT:    .cfi_offset w30, -866; CHECK-NEXT:    .cfi_offset w29, -1667; CHECK-NEXT:    .cfi_offset w19, -2468; CHECK-NEXT:    .cfi_offset w20, -3269; CHECK-NEXT:    ldr d0, [sp, #40]70; CHECK-NEXT:    ldr d1, [x0]71; CHECK-NEXT:    mov x8, #1 ; =0x172; CHECK-NEXT:    movk x8, #2047, lsl #1673; CHECK-NEXT:    fadd d0, d1, d074; CHECK-NEXT:    fmov d1, x875; CHECK-NEXT:    fcmp d0, d176; CHECK-NEXT:    str d0, [sp, #32]77; CHECK-NEXT:    b.mi LBB1_278; CHECK-NEXT:    b.gt LBB1_279; CHECK-NEXT:  ; %bb.1: ; %then80; CHECK-NEXT:    add x1, sp, #3281; CHECK-NEXT:    add x19, sp, #3282; CHECK-NEXT:    bl _fn83; CHECK-NEXT:    str xzr, [x19]84; CHECK-NEXT:  LBB1_2: ; %exit85; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload86; CHECK-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload87; CHECK-NEXT:    ret88entry:89  %l.a = load double, ptr %a, align 890  %gep.b = getelementptr inbounds %struct.s, ptr %b, i64 0, i32 191  %l.b = load double, ptr %gep.b, align 892  %add = fadd double %l.a, %l.b93  store double %add, ptr %b, align 894  %c = fcmp ueq double %add, 0x7FF000195  br i1 %c, label %then, label %exit96 97then:98  tail call void @fn(ptr %a, ptr %b)99  store double 0.000000e+00, ptr %b, align 8100  br label %exit101 102exit:103  ret void104}105 106; %l.b may read memory from the callee's stack due to inalloca.107define void @test_inalloca_pointers(ptr %a, ptr inalloca(%struct.s) %b) {108; CHECK-LABEL: test_inalloca_pointers:109; CHECK:       ; %bb.0: ; %entry110; CHECK-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill111; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill112; CHECK-NEXT:    .cfi_def_cfa_offset 32113; CHECK-NEXT:    .cfi_offset w30, -8114; CHECK-NEXT:    .cfi_offset w29, -16115; CHECK-NEXT:    .cfi_offset w19, -24116; CHECK-NEXT:    .cfi_offset w20, -32117; CHECK-NEXT:    ldr d0, [sp, #40]118; CHECK-NEXT:    ldr d1, [x0]119; CHECK-NEXT:    mov x8, #1 ; =0x1120; CHECK-NEXT:    movk x8, #2047, lsl #16121; CHECK-NEXT:    fadd d0, d1, d0122; CHECK-NEXT:    fmov d1, x8123; CHECK-NEXT:    fcmp d0, d1124; CHECK-NEXT:    str d0, [sp, #32]125; CHECK-NEXT:    b.mi LBB2_2126; CHECK-NEXT:    b.gt LBB2_2127; CHECK-NEXT:  ; %bb.1: ; %then128; CHECK-NEXT:    add x1, sp, #32129; CHECK-NEXT:    add x19, sp, #32130; CHECK-NEXT:    bl _fn131; CHECK-NEXT:    str xzr, [x19]132; CHECK-NEXT:  LBB2_2: ; %exit133; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload134; CHECK-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload135; CHECK-NEXT:    ret136entry:137  %l.a = load double, ptr %a, align 8138  %gep.b = getelementptr inbounds %struct.s, ptr %b, i64 0, i32 1139  %l.b = load double, ptr %gep.b, align 8140  %add = fadd double %l.a, %l.b141  store double %add, ptr %b, align 8142  %c = fcmp ueq double %add, 0x7FF0001143  br i1 %c, label %then, label %exit144 145then:146  tail call void @fn(ptr %a, ptr %b)147  store double 0.000000e+00, ptr %b, align 8148  br label %exit149 150exit:151  ret void152}153 154; %l.b may read memory from the callee's stack due to preallocated.155define void @test_preallocated_pointers(ptr %a, ptr preallocated(%struct.s) %b) {156; CHECK-LABEL: test_preallocated_pointers:157; CHECK:       ; %bb.0: ; %entry158; CHECK-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill159; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill160; CHECK-NEXT:    .cfi_def_cfa_offset 32161; CHECK-NEXT:    .cfi_offset w30, -8162; CHECK-NEXT:    .cfi_offset w29, -16163; CHECK-NEXT:    .cfi_offset w19, -24164; CHECK-NEXT:    .cfi_offset w20, -32165; CHECK-NEXT:    ldr d0, [sp, #40]166; CHECK-NEXT:    ldr d1, [x0]167; CHECK-NEXT:    mov x8, #1 ; =0x1168; CHECK-NEXT:    movk x8, #2047, lsl #16169; CHECK-NEXT:    fadd d0, d1, d0170; CHECK-NEXT:    fmov d1, x8171; CHECK-NEXT:    fcmp d0, d1172; CHECK-NEXT:    str d0, [sp, #32]173; CHECK-NEXT:    b.mi LBB3_2174; CHECK-NEXT:    b.gt LBB3_2175; CHECK-NEXT:  ; %bb.1: ; %then176; CHECK-NEXT:    add x1, sp, #32177; CHECK-NEXT:    add x19, sp, #32178; CHECK-NEXT:    bl _fn179; CHECK-NEXT:    str xzr, [x19]180; CHECK-NEXT:  LBB3_2: ; %exit181; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload182; CHECK-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload183; CHECK-NEXT:    ret184entry:185  %l.a = load double, ptr %a, align 8186  %gep.b = getelementptr inbounds %struct.s, ptr %b, i64 0, i32 1187  %l.b = load double, ptr %gep.b, align 8188  %add = fadd double %l.a, %l.b189  store double %add, ptr %b, align 8190  %c = fcmp ueq double %add, 0x7FF0001191  br i1 %c, label %then, label %exit192 193then:194  tail call void @fn(ptr %a, ptr %b)195  store double 0.000000e+00, ptr %b, align 8196  br label %exit197 198exit:199  ret void200}201