brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 1f0581a Raw
119 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sve -mattr=+sme -start-after=simplifycfg -enable-tail-merge=false -verify-machineinstrs < %s | FileCheck %s3 4declare void @normal_callee();5declare void @streaming_callee() "aarch64_pstate_sm_enabled";6declare void @streaming_compatible_callee() "aarch64_pstate_sm_compatible";7 8define float @sm_body_sm_compatible_simple() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" nounwind {9; CHECK-LABEL: sm_body_sm_compatible_simple:10; CHECK:       // %bb.0:11; CHECK-NEXT:    stp d15, d14, [sp, #-64]! // 16-byte Folded Spill12; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill13; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill14; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill15; CHECK-NEXT:    mrs x8, SVCR16; CHECK-NEXT:    tbnz w8, #0, .LBB0_217; CHECK-NEXT:  // %bb.1:18; CHECK-NEXT:    smstart sm19; CHECK-NEXT:  .LBB0_2:20; CHECK-NEXT:    tbnz w8, #0, .LBB0_421; CHECK-NEXT:  // %bb.3:22; CHECK-NEXT:    smstop sm23; CHECK-NEXT:  .LBB0_4:24; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload25; CHECK-NEXT:    fmov s0, wzr26; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload27; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload28; CHECK-NEXT:    ldp d15, d14, [sp], #64 // 16-byte Folded Reload29; CHECK-NEXT:    ret30  ret float zeroinitializer31}32 33define void @sm_body_caller_sm_compatible_caller_normal_callee() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" nounwind {34; CHECK-LABEL: sm_body_caller_sm_compatible_caller_normal_callee:35; CHECK:       // %bb.0:36; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill37; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill38; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill39; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill40; CHECK-NEXT:    stp x30, x19, [sp, #64] // 16-byte Folded Spill41; CHECK-NEXT:    mrs x19, SVCR42; CHECK-NEXT:    tbnz w19, #0, .LBB1_243; CHECK-NEXT:  // %bb.1:44; CHECK-NEXT:    smstart sm45; CHECK-NEXT:  .LBB1_2:46; CHECK-NEXT:    smstop sm47; CHECK-NEXT:    bl normal_callee48; CHECK-NEXT:    smstart sm49; CHECK-NEXT:    tbnz w19, #0, .LBB1_450; CHECK-NEXT:  // %bb.3:51; CHECK-NEXT:    smstop sm52; CHECK-NEXT:  .LBB1_4:53; CHECK-NEXT:    ldp x30, x19, [sp, #64] // 16-byte Folded Reload54; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload55; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload56; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload57; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload58; CHECK-NEXT:    ret59  call void @normal_callee()60  ret void61}62 63; Function Attrs: nounwind uwtable vscale_range(1,16)64define void @streaming_body_and_streaming_compatible_interface_multi_basic_block(i32 noundef %x) "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" nounwind {65; CHECK-LABEL: streaming_body_and_streaming_compatible_interface_multi_basic_block:66; CHECK:       // %bb.0: // %entry67; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill68; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill69; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill70; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill71; CHECK-NEXT:    stp x30, x19, [sp, #64] // 16-byte Folded Spill72; CHECK-NEXT:    mrs x19, SVCR73; CHECK-NEXT:    tbnz w19, #0, .LBB2_274; CHECK-NEXT:  // %bb.1: // %entry75; CHECK-NEXT:    smstart sm76; CHECK-NEXT:  .LBB2_2: // %entry77; CHECK-NEXT:    cbz w0, .LBB2_678; CHECK-NEXT:  // %bb.3: // %if.else79; CHECK-NEXT:    bl streaming_compatible_callee80; CHECK-NEXT:    tbnz w19, #0, .LBB2_581; CHECK-NEXT:  // %bb.4: // %if.else82; CHECK-NEXT:    smstop sm83; CHECK-NEXT:  .LBB2_5: // %if.else84; CHECK-NEXT:    ldp x30, x19, [sp, #64] // 16-byte Folded Reload85; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload86; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload87; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload88; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload89; CHECK-NEXT:    ret90; CHECK-NEXT:  .LBB2_6: // %if.then91; CHECK-NEXT:    smstop sm92; CHECK-NEXT:    bl normal_callee93; CHECK-NEXT:    smstart sm94; CHECK-NEXT:    tbnz w19, #0, .LBB2_895; CHECK-NEXT:  // %bb.7: // %if.then96; CHECK-NEXT:    smstop sm97; CHECK-NEXT:  .LBB2_8: // %if.then98; CHECK-NEXT:    ldp x30, x19, [sp, #64] // 16-byte Folded Reload99; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload100; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload101; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload102; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload103; CHECK-NEXT:    ret104entry:105  %cmp = icmp eq i32 %x, 0106  br i1 %cmp, label %if.then, label %if.else107 108if.then:                                          ; preds = %entry109  tail call void @normal_callee()110  br label %return111 112if.else:                                          ; preds = %entry113  tail call void @streaming_compatible_callee()114  br label %return115 116return:                                           ; preds = %if.else, %if.then117  ret void118}119