xref: /llvm-project/llvm/test/CodeGen/ARM/no_redundant_trunc_for_cmp.ll (revision bed1c7f061aa12417aa081e334afdba45767b938)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; This test check if redundant truncate for eq/ne cmp is skipped during code gen.
3;RUN: llc -mtriple=thumbv7-eabi < %s | FileCheck %s
4
5define void @test_zero(i16 signext %x) optsize {
6; CHECK-LABEL: test_zero:
7; CHECK:       @ %bb.0: @ %entry
8; CHECK-NEXT:    cbz r0, .LBB0_2
9; CHECK-NEXT:  @ %bb.1: @ %if.then
10; CHECK-NEXT:    b foo1
11; CHECK-NEXT:  .LBB0_2: @ %if.else
12; CHECK-NEXT:    b foo2
13entry:
14  %tobool = icmp eq i16 %x, 0
15  br i1 %tobool, label %if.else, label %if.then
16if.then:                                          ; preds = %entry
17  tail call void @foo1()
18  br label %if.end
19
20if.else:                                          ; preds = %entry
21  tail call void @foo2()
22  br label %if.end
23
24if.end:                                           ; preds = %if.else, %if.then
25  ret void
26}
27
28define void @test_i8_nonzero(i18 signext %x) optsize {
29; CHECK-LABEL: test_i8_nonzero:
30; CHECK:       @ %bb.0: @ %entry
31; CHECK-NEXT:    cmp r0, #150
32; CHECK-NEXT:    it eq
33; CHECK-NEXT:    beq foo2
34; CHECK-NEXT:  .LBB1_1: @ %if.then
35; CHECK-NEXT:    b foo1
36entry:
37  %tobool = icmp eq i18 %x, 150
38  br i1 %tobool, label %if.else, label %if.then
39if.then:                                          ; preds = %entry
40  tail call void @foo1()
41  br label %if.end
42
43if.else:                                          ; preds = %entry
44  tail call void @foo2()
45  br label %if.end
46
47if.end:                                           ; preds = %if.else, %if.then
48  ret void
49}
50
51define void @test_i8_i16(i8 signext %x) optsize {
52; CHECK-LABEL: test_i8_i16:
53; CHECK:       @ %bb.0: @ %entry
54; CHECK-NEXT:    cmp.w r0, #300
55; CHECK-NEXT:    it eq
56; CHECK-NEXT:    beq foo2
57; CHECK-NEXT:  .LBB2_1: @ %if.then
58; CHECK-NEXT:    b foo1
59entry:
60  %x16 = sext i8 %x to i16
61  %tobool = icmp eq i16 %x16, 300
62  br i1 %tobool, label %if.else, label %if.then
63if.then:                                          ; preds = %entry
64  tail call void @foo1()
65  br label %if.end
66
67if.else:                                          ; preds = %entry
68  tail call void @foo2()
69  br label %if.end
70
71if.end:                                           ; preds = %if.else, %if.then
72  ret void
73}
74
75define void @test_i16_i8(i16 signext %x) optsize {
76; CHECK-LABEL: test_i16_i8:
77; CHECK:       @ %bb.0: @ %entry
78; CHECK-NEXT:    uxtb r0, r0
79; CHECK-NEXT:    cmp r0, #128
80; CHECK-NEXT:    it eq
81; CHECK-NEXT:    beq foo2
82; CHECK-NEXT:  .LBB3_1: @ %if.then
83; CHECK-NEXT:    b foo1
84entry:
85  %x8 = trunc i16 %x to i8
86  %tobool = icmp eq i8 %x8, 128
87  br i1 %tobool, label %if.else, label %if.then
88if.then:                                          ; preds = %entry
89  tail call void @foo1()
90  br label %if.end
91
92if.else:                                          ; preds = %entry
93  tail call void @foo2()
94  br label %if.end
95
96if.end:                                           ; preds = %if.else, %if.then
97  ret void
98}
99
100define void @test_zext_zero(i16 zeroext %x) optsize {
101; CHECK-LABEL: test_zext_zero:
102; CHECK:       @ %bb.0: @ %entry
103; CHECK-NEXT:    cbz r0, .LBB4_2
104; CHECK-NEXT:  @ %bb.1: @ %if.then
105; CHECK-NEXT:    b foo1
106; CHECK-NEXT:  .LBB4_2: @ %if.else
107; CHECK-NEXT:    b foo2
108entry:
109  %tobool = icmp eq i16 %x, 0
110  br i1 %tobool, label %if.else, label %if.then
111if.then:                                          ; preds = %entry
112  tail call void @foo1()
113  br label %if.end
114
115if.else:                                          ; preds = %entry
116  tail call void @foo2()
117  br label %if.end
118
119if.end:                                           ; preds = %if.else, %if.then
120  ret void
121}
122
123declare void @foo1(...)
124declare void @foo2(...)
125