[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Hexagon / packetize-cfi-location.ll
blob0d80a7bb289d02bb8a8fc2c2cc980abc6424f03d
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 target triple = "hexagon"
4 %type.0 = type { i32, i8**, i32, i32, i32 }
6 ; Check that CFI is before the packet with call+allocframe.
7 ; CHECK-LABEL: danny:
8 ; CHECK: cfi_def_cfa
9 ; CHECK: call throw
10 ; CHECK-NEXT: allocframe
12 ; Expect packet:
13 ; {
14 ;   call throw
15 ;   allocframe(#0)
16 ; }
18 define i8* @danny(%type.0* %p0, i32 %p1) #0 {
19 entry:
20   %t0 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 4
21   %t1 = load i32, i32* %t0, align 4
22   %th = icmp ugt i32 %t1, %p1
23   br i1 %th, label %if.end, label %if.then
25 if.then:                                          ; preds = %entry
26   tail call void @throw(%type.0* nonnull %p0)
27   unreachable
29 if.end:                                           ; preds = %entry
30   %t6 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 3
31   %t2 = load i32, i32* %t6, align 4
32   %t9 = add i32 %t2, %p1
33   %ta = lshr i32 %t9, 4
34   %tb = and i32 %t9, 15
35   %t7 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 2
36   %t3 = load i32, i32* %t7, align 4
37   %tc = icmp ult i32 %ta, %t3
38   %td = select i1 %tc, i32 0, i32 %t3
39   %te = sub i32 %ta, %td
40   %t8 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 1
41   %t4 = load i8**, i8*** %t8, align 4
42   %tf = getelementptr inbounds i8*, i8** %t4, i32 %te
43   %t5 = load i8*, i8** %tf, align 4
44   %tg = getelementptr inbounds i8, i8* %t5, i32 %tb
45   ret i8* %tg
48 ; Check that CFI is after allocframe.
49 ; CHECK-LABEL: sammy:
50 ; CHECK: allocframe
51 ; CHECK: cfi_def_cfa
53 define void @sammy(%type.0* %p0, i32 %p1) #0 {
54 entry:
55   %t0 = icmp sgt i32 %p1, 0
56   br i1 %t0, label %if.then, label %if.else
57 if.then:
58   call void @throw(%type.0* nonnull %p0)
59   br label %if.end
60 if.else:
61   call void @nothrow() #2
62   br label %if.end
63 if.end:
64   ret void
67 declare void @throw(%type.0*) #1
68 declare void @nothrow() #2
70 attributes #0 = { "target-cpu"="hexagonv55" }
71 attributes #1 = { noreturn "target-cpu"="hexagonv55" }
72 attributes #2 = { nounwind "target-cpu"="hexagonv55" }