fix PR4963: folding insertvalue would sometimes turn a packed struct into
[llvm/avr.git] / test / Transforms / InstCombine / 2004-11-27-SetCCForCastLargerAndConstant.ll
bloba1c77c24c9cd1f33c7a004bffa7532235088859a
1 ; This test case tests the InstructionCombining optimization that
2 ; reduces things like:
3 ;   %Y = sext i8 %X to i32 
4 ;   %C = icmp ult i32 %Y, 1024
5 ; to
6 ;   %C = i1 true
7 ; It includes test cases for different constant values, signedness of the
8 ; cast operands, and types of setCC operators. In all cases, the cast should
9 ; be eliminated. In many cases the setCC is also eliminated based on the
10 ; constant value and the range of the casted value.
12 ; RUN: opt < %s -instcombine -S | \
13 ; RUN:    notcast .*int
14 ; END.
15 define i1 @lt_signed_to_large_unsigned(i8 %SB) {
16         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
17         %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
18         ret i1 %C
21 define i1 @lt_signed_to_large_signed(i8 %SB) {
22         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
23         %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
24         ret i1 %C
27 define i1 @lt_signed_to_large_negative(i8 %SB) {
28         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
29         %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
30         ret i1 %C
33 define i1 @lt_signed_to_small_signed(i8 %SB) {
34         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
35         %C = icmp slt i32 %Y, 17                ; <i1> [#uses=1]
36         ret i1 %C
38 define i1 @lt_signed_to_small_negative(i8 %SB) {
39         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
40         %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
41         ret i1 %C
44 define i1 @lt_unsigned_to_large_unsigned(i8 %SB) {
45         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
46         %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
47         ret i1 %C
50 define i1 @lt_unsigned_to_large_signed(i8 %SB) {
51         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
52         %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
53         ret i1 %C
56 define i1 @lt_unsigned_to_large_negative(i8 %SB) {
57         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
58         %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
59         ret i1 %C
62 define i1 @lt_unsigned_to_small_unsigned(i8 %SB) {
63         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
64         %C = icmp ult i32 %Y, 17                ; <i1> [#uses=1]
65         ret i1 %C
68 define i1 @lt_unsigned_to_small_negative(i8 %SB) {
69         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
70         %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
71         ret i1 %C
74 define i1 @gt_signed_to_large_unsigned(i8 %SB) {
75         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
76         %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
77         ret i1 %C
80 define i1 @gt_signed_to_large_signed(i8 %SB) {
81         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
82         %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
83         ret i1 %C
86 define i1 @gt_signed_to_large_negative(i8 %SB) {
87         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
88         %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
89         ret i1 %C
91 define i1 @gt_signed_to_small_signed(i8 %SB) {
92         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
93         %C = icmp sgt i32 %Y, 17                ; <i1> [#uses=1]
94         ret i1 %C
97 define i1 @gt_signed_to_small_negative(i8 %SB) {
98         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
99         %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
100         ret i1 %C
103 define i1 @gt_unsigned_to_large_unsigned(i8 %SB) {
104         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
105         %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
106         ret i1 %C
109 define i1 @gt_unsigned_to_large_signed(i8 %SB) {
110         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
111         %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
112         ret i1 %C
115 define i1 @gt_unsigned_to_large_negative(i8 %SB) {
116         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
117         %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
118         ret i1 %C
121 define i1 @gt_unsigned_to_small_unsigned(i8 %SB) {
122         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
123         %C = icmp ugt i32 %Y, 17                ; <i1> [#uses=1]
124         ret i1 %C
127 define i1 @gt_unsigned_to_small_negative(i8 %SB) {
128         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
129         %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
130         ret i1 %C