94 lines · plain
1; RUN: llc -mtriple=aarch64-- -verify-machineinstrs < %s | FileCheck %s --check-prefix=ASM2; RUN: llc -mtriple=aarch64-- -verify-machineinstrs -stop-after=finalize-isel < %s | FileCheck %s --check-prefixes=MIR,ISEL3; RUN: llc -mtriple=aarch64-- -verify-machineinstrs -stop-after=kcfi < %s | FileCheck %s --check-prefixes=MIR,KCFI4 5; ASM: .word 123456786define void @f1(ptr noundef %x) #1 !kcfi_type !2 {7; ASM-LABEL: f1:8; ASM: // %bb.0:9; ASM: ldur w16, [x0, #-4]10; ASM-NEXT: movk w17, #2491011; ASM-NEXT: movk w17, #188, lsl #1612; ASM-NEXT: cmp w16, w1713; ASM-NEXT: b.eq .Ltmp014; ASM-NEXT: brk #0x822015; ASM-NEXT: .Ltmp0:16; ASM-NEXT: blr x017 18; MIR-LABEL: name: f119; MIR: body:20 21; ISEL: BLR %0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, cfi-type 1234567822 23; KCFI: BUNDLE{{.*}} {24; KCFI-NEXT: KCFI_CHECK $x0, 12345678, implicit-def $x9, implicit-def $x16, implicit-def $x17, implicit-def $nzcv25; KCFI-NEXT: BLR killed $x0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp26; KCFI-NEXT: }27 28 call void %x() [ "kcfi"(i32 12345678) ]29 ret void30}31 32; ASM: .word 1234567833define void @f2(ptr noundef %x) #1 !kcfi_type !2 {34; ASM-LABEL: f2:35; ASM: // %bb.0:36; ASM: ldur w16, [x0, #-4]37; ASM-NEXT: movk w17, #2491038; ASM-NEXT: movk w17, #188, lsl #1639; ASM-NEXT: cmp w16, w1740; ASM-NEXT: b.eq .Ltmp141; ASM-NEXT: brk #0x822042; ASM-NEXT: .Ltmp1:43; ASM-NEXT: blr x044 45; MIR-LABEL: name: f246; MIR: body:47 48; ISEL: BLR_BTI %0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, cfi-type 1234567849 50; KCFI: BUNDLE{{.*}} {51; KCFI-NEXT: KCFI_CHECK $x0, 12345678, implicit-def $x9, implicit-def $x16, implicit-def $x17, implicit-def $nzcv52; KCFI-NEXT: BLR killed $x0, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit-def dead $lr, implicit $sp, implicit-def $sp53; KCFI-NEXT: HINT 3654; KCFI-NEXT: }55 56 call void %x() #0 [ "kcfi"(i32 12345678) ]57 ret void58}59 60; ASM-NOT: .word:61define void @f3(ptr noundef %x) #1 {62; ASM-LABEL: f3:63; ASM: // %bb.0:64; ASM: ldur w9, [x16, #-4]65; ASM-NEXT: movk w17, #2491066; ASM-NEXT: movk w17, #188, lsl #1667; ASM-NEXT: cmp w9, w1768; ASM-NEXT: b.eq .Ltmp269; ASM-NEXT: brk #0x823070; ASM-NEXT: .Ltmp2:71; ASM-NEXT: br x1672 73; MIR-LABEL: name: f374; MIR: body:75 76; ISEL: TCRETURNrix16x17 %1, 0, csr_aarch64_aapcs, implicit $sp, cfi-type 1234567877 78; KCFI: BUNDLE{{.*}} {79; KCFI-NEXT: KCFI_CHECK $x16, 12345678, implicit-def $x9, implicit-def $x16, implicit-def $x17, implicit-def $nzcv80; KCFI-NEXT: TCRETURNrix16x17 internal killed $x16, 0, csr_aarch64_aapcs, implicit $sp81; KCFI-NEXT: }82 83 tail call void %x() [ "kcfi"(i32 12345678) ]84 ret void85}86 87attributes #0 = { returns_twice }88attributes #1 = { "branch-target-enforcement" }89 90!llvm.module.flags = !{!0, !1}91!0 = !{i32 8, !"branch-target-enforcement", i32 1}92!1 = !{i32 4, !"kcfi", i32 1}93!2 = !{i32 12345678}94