xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/cmp_pred2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon -mcpu=hexagonv5  < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; Make sure that the assembler mapped compare instructions are correctly generated.
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@c = common global i32 0, align 4
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32 %a, i32 %b) nounwind {
7*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp.ge
8*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.gt
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %a, 100
11*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %entry.if.end_crit_edge
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerentry.if.end_crit_edge:
14*9880d681SAndroid Build Coastguard Worker  %.pre = load i32, i32* @c, align 4
15*9880d681SAndroid Build Coastguard Worker  br label %if.end
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerif.then:
18*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i32 %a, -10
19*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32* @c, align 4
20*9880d681SAndroid Build Coastguard Worker  br label %if.end
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerif.end:
23*9880d681SAndroid Build Coastguard Worker  %0 = phi i32 [ %.pre, %entry.if.end_crit_edge ], [ %sub, %if.then ]
24*9880d681SAndroid Build Coastguard Worker  ret i32 %0
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %a, i32 %b) nounwind {
28*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp.lt
29*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.gt
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %a, %b
32*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %entry.if.end_crit_edge, label %if.then
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerentry.if.end_crit_edge:
35*9880d681SAndroid Build Coastguard Worker  %.pre = load i32, i32* @c, align 4
36*9880d681SAndroid Build Coastguard Worker  br label %if.end
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerif.then:
39*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i32 %a, -10
40*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32* @c, align 4
41*9880d681SAndroid Build Coastguard Worker  br label %if.end
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerif.end:
44*9880d681SAndroid Build Coastguard Worker  %0 = phi i32 [ %.pre, %entry.if.end_crit_edge ], [ %sub, %if.then ]
45*9880d681SAndroid Build Coastguard Worker  ret i32 %0
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine i32 @test4(i32 %a, i32 %b) nounwind {
49*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp.ltu
50*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.gtu
51*9880d681SAndroid Build Coastguard Workerentry:
52*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %a, %b
53*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %entry.if.end_crit_edge, label %if.then
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerentry.if.end_crit_edge:
56*9880d681SAndroid Build Coastguard Worker  %.pre = load i32, i32* @c, align 4
57*9880d681SAndroid Build Coastguard Worker  br label %if.end
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerif.then:
60*9880d681SAndroid Build Coastguard Worker  %sub = add i32 %a, -10
61*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32* @c, align 4
62*9880d681SAndroid Build Coastguard Worker  br label %if.end
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerif.end:
65*9880d681SAndroid Build Coastguard Worker  %0 = phi i32 [ %.pre, %entry.if.end_crit_edge ], [ %sub, %if.then ]
66*9880d681SAndroid Build Coastguard Worker  ret i32 %0
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(i32 %a, i32 %b) nounwind {
70*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.gtu
71*9880d681SAndroid Build Coastguard Workerentry:
72*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %a, 29999
73*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %entry.if.end_crit_edge
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerentry.if.end_crit_edge:
76*9880d681SAndroid Build Coastguard Worker  %.pre = load i32, i32* @c, align 4
77*9880d681SAndroid Build Coastguard Worker  br label %if.end
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerif.then:
80*9880d681SAndroid Build Coastguard Worker  %sub = add i32 %a, -10
81*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32* @c, align 4
82*9880d681SAndroid Build Coastguard Worker  br label %if.end
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerif.end:
85*9880d681SAndroid Build Coastguard Worker  %0 = phi i32 [ %.pre, %entry.if.end_crit_edge ], [ %sub, %if.then ]
86*9880d681SAndroid Build Coastguard Worker  ret i32 %0
87*9880d681SAndroid Build Coastguard Worker}
88