| ; 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} |