xref: /llvm-project/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll (revision bcbc6151640f53e9d78392c66de9760c664d8b1d)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
2; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
3
4; Don't promote paramaters of/arguments to naked functions
5
6@g = common global i32 0, align 4
7
8define i32 @bar() {
9; CHECK-LABEL: define {{[^@]+}}@bar() {
10; CHECK-NEXT:  entry:
11; CHECK-NEXT:    [[CALL:%.*]] = call i32 @foo(ptr @g)
12; CHECK-NEXT:    ret i32 [[CALL]]
13;
14entry:
15  %call = call i32 @foo(ptr @g)
16  ret i32 %call
17}
18
19define internal i32 @foo(ptr) #0 {
20; CHECK-LABEL: define {{[^@]+}}@foo
21; CHECK-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
22; CHECK-NEXT:  entry:
23; CHECK-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
24; CHECK-NEXT:    call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""()
25; CHECK-NEXT:    unreachable
26;
27entry:
28  %retval = alloca i32, align 4
29  call void asm sideeffect "ldr r0, [r0] \0Abx lr        \0A", ""()
30  unreachable
31}
32
33
34attributes #0 = { naked }
35