summaryrefslogtreecommitdiff
path: root/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll
blob: 759c619e6db2ca6db65ccbb49ddc19b9d3363adb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
; This test case tests the InstructionCombining optimization that
; reduces things like:
;   %Y = cast sbyte %X to uint
;   %C = setlt uint %Y, 1024
; to
;   %C = bool true
; It includes test cases for different constant values, signedness of the
; cast operands, and types of setCC operators. In all cases, the cast should
; be eliminated. In many cases the setCC is also eliminated based on the
; constant value and the range of the casted value.
;
; RUN: llvm-as %s -o - | opt -instcombine | llvm-dis | notcast '.*int'

implementation   ; Functions:

bool %lt_signed_to_large_unsigned(sbyte %SB) {
  %Y = cast sbyte %SB to uint		; <uint> [#uses=1]
  %C = setlt uint %Y, 1024		; <bool> [#uses=1]
  ret bool %C
}

bool %lt_signed_to_large_signed(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setlt int %Y, 1024
  ret bool %C
}

bool %lt_signed_to_large_negative(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setlt int %Y, -1024
  ret bool %C
}

bool %lt_signed_to_small_signed(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setlt int %Y, 17
  ret bool %C
}

bool %lt_signed_to_small_negative(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setlt int %Y, -17
  ret bool %C
}

bool %lt_unsigned_to_large_unsigned(ubyte %SB) {
  %Y = cast ubyte %SB to uint		; <uint> [#uses=1]
  %C = setlt uint %Y, 1024		; <bool> [#uses=1]
  ret bool %C
}

bool %lt_unsigned_to_large_signed(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setlt int %Y, 1024
  ret bool %C
}

bool %lt_unsigned_to_large_negative(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setlt int %Y, -1024
  ret bool %C
}

bool %lt_unsigned_to_small_unsigned(ubyte %SB) {
  %Y = cast ubyte %SB to uint		; <uint> [#uses=1]
  %C = setlt uint %Y, 17		; <bool> [#uses=1]
  ret bool %C
}

bool %lt_unsigned_to_small_negative(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setlt int %Y, -17
  ret bool %C
}

bool %gt_signed_to_large_unsigned(sbyte %SB) {
  %Y = cast sbyte %SB to uint		; <uint> [#uses=1]
  %C = setgt uint %Y, 1024		; <bool> [#uses=1]
  ret bool %C
}

bool %gt_signed_to_large_signed(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setgt int %Y, 1024
  ret bool %C
}

bool %gt_signed_to_large_negative(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setgt int %Y, -1024
  ret bool %C
}

bool %gt_signed_to_small_signed(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setgt int %Y, 17
  ret bool %C
}

bool %gt_signed_to_small_negative(sbyte %SB) {
  %Y = cast sbyte %SB to int
  %C = setgt int %Y, -17
  ret bool %C
}

bool %gt_unsigned_to_large_unsigned(ubyte %SB) {
  %Y = cast ubyte %SB to uint		; <uint> [#uses=1]
  %C = setgt uint %Y, 1024		; <bool> [#uses=1]
  ret bool %C
}

bool %gt_unsigned_to_large_signed(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setgt int %Y, 1024
  ret bool %C
}

bool %gt_unsigned_to_large_negative(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setgt int %Y, -1024
  ret bool %C
}

bool %gt_unsigned_to_small_unsigned(ubyte %SB) {
  %Y = cast ubyte %SB to uint		; <uint> [#uses=1]
  %C = setgt uint %Y, 17		; <bool> [#uses=1]
  ret bool %C
}

bool %gt_unsigned_to_small_negative(ubyte %SB) {
  %Y = cast ubyte %SB to int
  %C = setgt int %Y, -17
  ret bool %C
}