| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=armv7-linux-gnueabi -verify-machineinstrs < %s | FileCheck %s |
| |
| ; CHECK: .p2align 2 |
| ; CHECK-NOT: nop |
| ; CHECK: .long 12345678 |
| define void @f1(ptr noundef %x) !kcfi_type !1 { |
| ; CHECK-LABEL: f1: |
| ; CHECK: @ %bb.0: |
| ; CHECK-NEXT: .save {r11, lr} |
| ; CHECK-NEXT: push {r11, lr} |
| ; CHECK-NEXT: bic r12, r0, #1 |
| ; CHECK-NEXT: ldr r12, [r12, #-4] |
| ; CHECK-NEXT: eor r12, r12, #78 |
| ; CHECK-NEXT: eor r12, r12, #24832 |
| ; CHECK-NEXT: eor r12, r12, #12320768 |
| ; CHECK-NEXT: eors r12, r12, #0 |
| ; CHECK-NEXT: beq .Ltmp0 |
| ; CHECK-NEXT: udf #33760 |
| ; CHECK-NEXT: .Ltmp0: |
| ; CHECK-NEXT: blx r0 |
| ; CHECK-NEXT: pop {r11, pc} |
| call void %x() [ "kcfi"(i32 12345678) ] |
| ret void |
| } |
| |
| ; CHECK: .p2align 2 |
| ; CHECK-NOT: .long |
| ; CHECK-NOT: nop |
| define void @f2(ptr noundef %x) { |
| ; CHECK-LABEL: f2: |
| ; CHECK: @ %bb.0: |
| ; CHECK-NEXT: .save {r11, lr} |
| ; CHECK-NEXT: push {r11, lr} |
| ; CHECK-NEXT: bic r12, r0, #1 |
| ; CHECK-NEXT: ldr r12, [r12, #-4] |
| ; CHECK-NEXT: eor r12, r12, #78 |
| ; CHECK-NEXT: eor r12, r12, #24832 |
| ; CHECK-NEXT: eor r12, r12, #12320768 |
| ; CHECK-NEXT: eors r12, r12, #0 |
| ; CHECK-NEXT: beq .Ltmp1 |
| ; CHECK-NEXT: udf #33760 |
| ; CHECK-NEXT: .Ltmp1: |
| ; CHECK-NEXT: blx r0 |
| ; CHECK-NEXT: pop {r11, pc} |
| call void %x() [ "kcfi"(i32 12345678) ] |
| ret void |
| } |
| |
| ; CHECK: .p2align 2 |
| ; CHECK: .long 12345678 |
| ; CHECK-COUNT-11: nop |
| define void @f3(ptr noundef %x) #0 !kcfi_type !1 { |
| ; CHECK-LABEL: f3: |
| ; CHECK: @ %bb.0: |
| ; CHECK-NEXT: .save {r11, lr} |
| ; CHECK-NEXT: push {r11, lr} |
| ; CHECK-NEXT: bic r12, r0, #1 |
| ; CHECK-NEXT: ldr r12, [r12, #-48] |
| ; CHECK-NEXT: eor r12, r12, #78 |
| ; CHECK-NEXT: eor r12, r12, #24832 |
| ; CHECK-NEXT: eor r12, r12, #12320768 |
| ; CHECK-NEXT: eors r12, r12, #0 |
| ; CHECK-NEXT: beq .Ltmp3 |
| ; CHECK-NEXT: udf #33760 |
| ; CHECK-NEXT: .Ltmp3: |
| ; CHECK-NEXT: blx r0 |
| ; CHECK-NEXT: pop {r11, pc} |
| call void %x() [ "kcfi"(i32 12345678) ] |
| ret void |
| } |
| |
| ; CHECK: .p2align 2 |
| ; CHECK-COUNT-11: nop |
| define void @f4(ptr noundef %x) #0 { |
| ; CHECK-LABEL: f4: |
| ; CHECK: @ %bb.0: |
| ; CHECK-NEXT: .save {r11, lr} |
| ; CHECK-NEXT: push {r11, lr} |
| ; CHECK-NEXT: bic r12, r0, #1 |
| ; CHECK-NEXT: ldr r12, [r12, #-48] |
| ; CHECK-NEXT: eor r12, r12, #78 |
| ; CHECK-NEXT: eor r12, r12, #24832 |
| ; CHECK-NEXT: eor r12, r12, #12320768 |
| ; CHECK-NEXT: eors r12, r12, #0 |
| ; CHECK-NEXT: beq .Ltmp5 |
| ; CHECK-NEXT: udf #33760 |
| ; CHECK-NEXT: .Ltmp5: |
| ; CHECK-NEXT: blx r0 |
| ; CHECK-NEXT: pop {r11, pc} |
| call void %x() [ "kcfi"(i32 12345678) ] |
| ret void |
| } |
| |
| attributes #0 = { "patchable-function-prefix"="11" } |
| |
| !llvm.module.flags = !{!0} |
| !0 = !{i32 4, !"kcfi", i32 1} |
| !1 = !{i32 12345678} |