Home | History | Annotate | Download | only in Assembler
      1 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
      2 
      3 @addr = external global i64
      4 
      5 define i64 @add_unsigned(i64 %x, i64 %y) {
      6 ; CHECK: %z = add nuw i64 %x, %y
      7 	%z = add nuw i64 %x, %y
      8 	ret i64 %z
      9 }
     10 
     11 define i64 @sub_unsigned(i64 %x, i64 %y) {
     12 ; CHECK: %z = sub nuw i64 %x, %y
     13 	%z = sub nuw i64 %x, %y
     14 	ret i64 %z
     15 }
     16 
     17 define i64 @mul_unsigned(i64 %x, i64 %y) {
     18 ; CHECK: %z = mul nuw i64 %x, %y
     19 	%z = mul nuw i64 %x, %y
     20 	ret i64 %z
     21 }
     22 
     23 define i64 @add_signed(i64 %x, i64 %y) {
     24 ; CHECK: %z = add nsw i64 %x, %y
     25 	%z = add nsw i64 %x, %y
     26 	ret i64 %z
     27 }
     28 
     29 define i64 @sub_signed(i64 %x, i64 %y) {
     30 ; CHECK: %z = sub nsw i64 %x, %y
     31 	%z = sub nsw i64 %x, %y
     32 	ret i64 %z
     33 }
     34 
     35 define i64 @mul_signed(i64 %x, i64 %y) {
     36 ; CHECK: %z = mul nsw i64 %x, %y
     37 	%z = mul nsw i64 %x, %y
     38 	ret i64 %z
     39 }
     40 
     41 define i64 @add_plain(i64 %x, i64 %y) {
     42 ; CHECK: %z = add i64 %x, %y
     43 	%z = add i64 %x, %y
     44 	ret i64 %z
     45 }
     46 
     47 define i64 @sub_plain(i64 %x, i64 %y) {
     48 ; CHECK: %z = sub i64 %x, %y
     49 	%z = sub i64 %x, %y
     50 	ret i64 %z
     51 }
     52 
     53 define i64 @mul_plain(i64 %x, i64 %y) {
     54 ; CHECK: %z = mul i64 %x, %y
     55 	%z = mul i64 %x, %y
     56 	ret i64 %z
     57 }
     58 
     59 define i64 @add_both(i64 %x, i64 %y) {
     60 ; CHECK: %z = add nuw nsw i64 %x, %y
     61 	%z = add nuw nsw i64 %x, %y
     62 	ret i64 %z
     63 }
     64 
     65 define i64 @sub_both(i64 %x, i64 %y) {
     66 ; CHECK: %z = sub nuw nsw i64 %x, %y
     67 	%z = sub nuw nsw i64 %x, %y
     68 	ret i64 %z
     69 }
     70 
     71 define i64 @mul_both(i64 %x, i64 %y) {
     72 ; CHECK: %z = mul nuw nsw i64 %x, %y
     73 	%z = mul nuw nsw i64 %x, %y
     74 	ret i64 %z
     75 }
     76 
     77 define i64 @add_both_reversed(i64 %x, i64 %y) {
     78 ; CHECK: %z = add nuw nsw i64 %x, %y
     79 	%z = add nsw nuw i64 %x, %y
     80 	ret i64 %z
     81 }
     82 
     83 define i64 @sub_both_reversed(i64 %x, i64 %y) {
     84 ; CHECK: %z = sub nuw nsw i64 %x, %y
     85 	%z = sub nsw nuw i64 %x, %y
     86 	ret i64 %z
     87 }
     88 
     89 define i64 @mul_both_reversed(i64 %x, i64 %y) {
     90 ; CHECK: %z = mul nuw nsw i64 %x, %y
     91 	%z = mul nsw nuw i64 %x, %y
     92 	ret i64 %z
     93 }
     94 
     95 define i64 @shl_both(i64 %x, i64 %y) {
     96 ; CHECK: %z = shl nuw nsw i64 %x, %y
     97 	%z = shl nuw nsw i64 %x, %y
     98 	ret i64 %z
     99 }
    100 
    101 define i64 @sdiv_exact(i64 %x, i64 %y) {
    102 ; CHECK: %z = sdiv exact i64 %x, %y
    103 	%z = sdiv exact i64 %x, %y
    104 	ret i64 %z
    105 }
    106 
    107 define i64 @sdiv_plain(i64 %x, i64 %y) {
    108 ; CHECK: %z = sdiv i64 %x, %y
    109 	%z = sdiv i64 %x, %y
    110 	ret i64 %z
    111 }
    112 
    113 define i64 @udiv_exact(i64 %x, i64 %y) {
    114 ; CHECK: %z = udiv exact i64 %x, %y
    115 	%z = udiv exact i64 %x, %y
    116 	ret i64 %z
    117 }
    118 
    119 define i64 @udiv_plain(i64 %x, i64 %y) {
    120 ; CHECK: %z = udiv i64 %x, %y
    121 	%z = udiv i64 %x, %y
    122 	ret i64 %z
    123 }
    124 
    125 define i64 @ashr_plain(i64 %x, i64 %y) {
    126 ; CHECK: %z = ashr i64 %x, %y
    127 	%z = ashr i64 %x, %y
    128 	ret i64 %z
    129 }
    130 
    131 define i64 @ashr_exact(i64 %x, i64 %y) {
    132 ; CHECK: %z = ashr exact i64 %x, %y
    133 	%z = ashr exact i64 %x, %y
    134 	ret i64 %z
    135 }
    136 
    137 define i64 @lshr_plain(i64 %x, i64 %y) {
    138 ; CHECK: %z = lshr i64 %x, %y
    139 	%z = lshr i64 %x, %y
    140 	ret i64 %z
    141 }
    142 
    143 define i64 @lshr_exact(i64 %x, i64 %y) {
    144 ; CHECK: %z = lshr exact i64 %x, %y
    145 	%z = lshr exact i64 %x, %y
    146 	ret i64 %z
    147 }
    148 
    149 define i64* @gep_nw(i64* %p, i64 %x) {
    150 ; CHECK: %z = getelementptr inbounds i64* %p, i64 %x
    151 	%z = getelementptr inbounds i64* %p, i64 %x
    152         ret i64* %z
    153 }
    154 
    155 define i64* @gep_plain(i64* %p, i64 %x) {
    156 ; CHECK: %z = getelementptr i64* %p, i64 %x
    157 	%z = getelementptr i64* %p, i64 %x
    158         ret i64* %z
    159 }
    160 
    161 define i64 @add_both_ce() {
    162 ; CHECK: ret i64 add nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    163 	ret i64 add nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    164 }
    165 
    166 define i64 @sub_both_ce() {
    167 ; CHECK: ret i64 sub nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    168 	ret i64 sub nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    169 }
    170 
    171 define i64 @mul_both_ce() {
    172 ; CHECK: ret i64 mul nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    173 	ret i64 mul nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    174 }
    175 
    176 define i64 @sdiv_exact_ce() {
    177 ; CHECK: ret i64 sdiv exact (i64 ptrtoint (i64* @addr to i64), i64 91)
    178 	ret i64 sdiv exact (i64 ptrtoint (i64* @addr to i64), i64 91)
    179 }
    180 
    181 define i64 @udiv_exact_ce() {
    182 ; CHECK: ret i64 udiv exact (i64 ptrtoint (i64* @addr to i64), i64 91)
    183 	ret i64 udiv exact (i64 ptrtoint (i64* @addr to i64), i64 91)
    184 }
    185 
    186 define i64 @ashr_exact_ce() {
    187 ; CHECK: ret i64 ashr exact (i64 ptrtoint (i64* @addr to i64), i64 9)
    188 	ret i64 ashr exact (i64 ptrtoint (i64* @addr to i64), i64 9)
    189 }
    190 
    191 define i64 @lshr_exact_ce() {
    192 ; CHECK: ret i64 lshr exact (i64 ptrtoint (i64* @addr to i64), i64 9)
    193 	ret i64 lshr exact (i64 ptrtoint (i64* @addr to i64), i64 9)
    194 }
    195 
    196 define i64* @gep_nw_ce() {
    197 ; CHECK: ret i64* getelementptr inbounds (i64* @addr, i64 171)
    198         ret i64* getelementptr inbounds (i64* @addr, i64 171)
    199 }
    200 
    201 define i64 @add_plain_ce() {
    202 ; CHECK: ret i64 add (i64 ptrtoint (i64* @addr to i64), i64 91)
    203 	ret i64 add (i64 ptrtoint (i64* @addr to i64), i64 91)
    204 }
    205 
    206 define i64 @sub_plain_ce() {
    207 ; CHECK: ret i64 sub (i64 ptrtoint (i64* @addr to i64), i64 91)
    208 	ret i64 sub (i64 ptrtoint (i64* @addr to i64), i64 91)
    209 }
    210 
    211 define i64 @mul_plain_ce() {
    212 ; CHECK: ret i64 mul (i64 ptrtoint (i64* @addr to i64), i64 91)
    213 	ret i64 mul (i64 ptrtoint (i64* @addr to i64), i64 91)
    214 }
    215 
    216 define i64 @sdiv_plain_ce() {
    217 ; CHECK: ret i64 sdiv (i64 ptrtoint (i64* @addr to i64), i64 91)
    218 	ret i64 sdiv (i64 ptrtoint (i64* @addr to i64), i64 91)
    219 }
    220 
    221 define i64* @gep_plain_ce() {
    222 ; CHECK: ret i64* getelementptr (i64* @addr, i64 171)
    223         ret i64* getelementptr (i64* @addr, i64 171)
    224 }
    225 
    226 define i64 @add_both_reversed_ce() {
    227 ; CHECK: ret i64 add nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    228 	ret i64 add nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    229 }
    230 
    231 define i64 @sub_both_reversed_ce() {
    232 ; CHECK: ret i64 sub nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    233 	ret i64 sub nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    234 }
    235 
    236 define i64 @mul_both_reversed_ce() {
    237 ; CHECK: ret i64 mul nuw nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    238 	ret i64 mul nsw nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    239 }
    240 
    241 define i64 @add_signed_ce() {
    242 ; CHECK: ret i64 add nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    243 	ret i64 add nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    244 }
    245 
    246 define i64 @sub_signed_ce() {
    247 ; CHECK: ret i64 sub nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    248 	ret i64 sub nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    249 }
    250 
    251 define i64 @mul_signed_ce() {
    252 ; CHECK: ret i64 mul nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    253 	ret i64 mul nsw (i64 ptrtoint (i64* @addr to i64), i64 91)
    254 }
    255 
    256 define i64 @shl_signed_ce() {
    257 ; CHECK: ret i64 shl nsw (i64 ptrtoint (i64* @addr to i64), i64 17)
    258 	ret i64 shl nsw (i64 ptrtoint (i64* @addr to i64), i64 17)
    259 }
    260 
    261 
    262 define i64 @add_unsigned_ce() {
    263 ; CHECK: ret i64 add nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    264 	ret i64 add nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    265 }
    266 
    267 define i64 @sub_unsigned_ce() {
    268 ; CHECK: ret i64 sub nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    269 	ret i64 sub nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    270 }
    271 
    272 define i64 @mul_unsigned_ce() {
    273 ; CHECK: ret i64 mul nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    274 	ret i64 mul nuw (i64 ptrtoint (i64* @addr to i64), i64 91)
    275 }
    276 
    277