annotate test/CodeGen/Hexagon/packetize-cfi-location.ll @ 146:3fc4d5c3e21e

set tail call flag for code segment in CGCAll
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 19:23:36 +0900
parents 1172e4bd9c6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
2
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
3 target triple = "hexagon"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
4 %type.0 = type { i32, i8**, i32, i32, i32 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
5
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
6 ; Check that CFI is before the packet with call+allocframe.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
7 ; CHECK-LABEL: danny:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
8 ; CHECK: cfi_def_cfa
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
9 ; CHECK: call throw
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
10 ; CHECK-NEXT: allocframe
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
11
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
12 ; Expect packet:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
13 ; {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
14 ; call throw
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
15 ; allocframe(#0)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
16 ; }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
17
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
18 define i8* @danny(%type.0* %p0, i32 %p1) #0 {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
19 entry:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
20 %t0 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
21 %t1 = load i32, i32* %t0, align 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
22 %th = icmp ugt i32 %t1, %p1
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
23 br i1 %th, label %if.end, label %if.then
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
24
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
25 if.then: ; preds = %entry
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
26 tail call void @throw(%type.0* nonnull %p0)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
27 unreachable
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
28
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
29 if.end: ; preds = %entry
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
30 %t6 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 3
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
31 %t2 = load i32, i32* %t6, align 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
32 %t9 = add i32 %t2, %p1
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
33 %ta = lshr i32 %t9, 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
34 %tb = and i32 %t9, 15
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
35 %t7 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 2
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
36 %t3 = load i32, i32* %t7, align 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
37 %tc = icmp ult i32 %ta, %t3
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
38 %td = select i1 %tc, i32 0, i32 %t3
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
39 %te = sub i32 %ta, %td
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
40 %t8 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 1
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
41 %t4 = load i8**, i8*** %t8, align 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
42 %tf = getelementptr inbounds i8*, i8** %t4, i32 %te
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
43 %t5 = load i8*, i8** %tf, align 4
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
44 %tg = getelementptr inbounds i8, i8* %t5, i32 %tb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
45 ret i8* %tg
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
46 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
47
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
48 ; Check that CFI is after allocframe.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
49 ; CHECK-LABEL: sammy:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
50 ; CHECK: allocframe
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
51 ; CHECK: cfi_def_cfa
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
52
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
53 define void @sammy(%type.0* %p0, i32 %p1) #0 {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
54 entry:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
55 %t0 = icmp sgt i32 %p1, 0
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
56 br i1 %t0, label %if.then, label %if.else
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
57 if.then:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
58 call void @throw(%type.0* nonnull %p0)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
59 br label %if.end
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
60 if.else:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
61 call void @nothrow() #2
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
62 br label %if.end
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
63 if.end:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
64 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
65 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
66
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
67 declare void @throw(%type.0*) #1
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
68 declare void @nothrow() #2
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
69
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
70 attributes #0 = { "target-cpu"="hexagonv55" }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
71 attributes #1 = { noreturn "target-cpu"="hexagonv55" }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
72 attributes #2 = { nounwind "target-cpu"="hexagonv55" }