| Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame^] | 1 | ; RUN: llc -O1 < %s -march=mips64 -mcpu=octeon | FileCheck %s -check-prefixes=ALL,OCTEON | 
|  | 2 | ; RUN: llc -O1 < %s -march=mips64 -mcpu=mips64 | FileCheck %s -check-prefixes=ALL,MIPS64 | 
| Kai Nacke | 93fe5e8 | 2014-03-20 11:51:58 +0000 | [diff] [blame] | 3 |  | 
| Kai Nacke | 13673ac | 2014-04-02 18:40:43 +0000 | [diff] [blame] | 4 | define i64 @addi64(i64 %a, i64 %b) nounwind { | 
|  | 5 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 6 | ; ALL-LABEL: addi64: | 
| Kai Nacke | 13673ac | 2014-04-02 18:40:43 +0000 | [diff] [blame] | 7 | ; OCTEON: jr      $ra | 
|  | 8 | ; OCTEON: baddu   $2, $4, $5 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 9 | ; MIPS64: daddu   $[[T0:[0-9]+]], $4, $5 | 
|  | 10 | ; MIPS64: jr      $ra | 
|  | 11 | ; MIPS64: andi    $2, $[[T0]], 255 | 
| Kai Nacke | 13673ac | 2014-04-02 18:40:43 +0000 | [diff] [blame] | 12 | %add = add i64 %a, %b | 
|  | 13 | %and = and i64 %add, 255 | 
|  | 14 | ret i64 %and | 
|  | 15 | } | 
|  | 16 |  | 
| Kai Nacke | 93fe5e8 | 2014-03-20 11:51:58 +0000 | [diff] [blame] | 17 | define i64 @mul(i64 %a, i64 %b) nounwind { | 
|  | 18 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 19 | ; ALL-LABEL: mul: | 
| Kai Nacke | 93fe5e8 | 2014-03-20 11:51:58 +0000 | [diff] [blame] | 20 | ; OCTEON: jr    $ra | 
|  | 21 | ; OCTEON: dmul  $2, $4, $5 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 22 | ; MIPS64: dmult $4, $5 | 
|  | 23 | ; MIPS64: jr    $ra | 
|  | 24 | ; MIPS64: mflo  $2 | 
| Kai Nacke | 93fe5e8 | 2014-03-20 11:51:58 +0000 | [diff] [blame] | 25 | %res = mul i64 %a, %b | 
|  | 26 | ret i64 %res | 
|  | 27 | } | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 28 |  | 
|  | 29 | define i64 @cmpeq(i64 %a, i64 %b) nounwind { | 
|  | 30 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 31 | ; ALL-LABEL: cmpeq: | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 32 | ; OCTEON: jr     $ra | 
|  | 33 | ; OCTEON: seq    $2, $4, $5 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 34 | ; MIPS64: xor    $[[T0:[0-9]+]], $4, $5 | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 35 | ; MIPS64: sltiu  $[[T1:[0-9]+]], $[[T0]], 1 | 
|  | 36 | ; MIPS64: dsll   $[[T2:[0-9]+]], $[[T1]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 37 | ; MIPS64: jr     $ra | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 38 | ; MIPS64: dsrl   $2, $[[T2]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 39 | %res = icmp eq i64 %a, %b | 
|  | 40 | %res2 = zext i1 %res to i64 | 
|  | 41 | ret i64 %res2 | 
|  | 42 | } | 
|  | 43 |  | 
|  | 44 | define i64 @cmpeqi(i64 %a) nounwind { | 
|  | 45 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 46 | ; ALL-LABEL: cmpeqi: | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 47 | ; OCTEON: jr     $ra | 
|  | 48 | ; OCTEON: seqi   $2, $4, 42 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 49 | ; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 42 | 
|  | 50 | ; MIPS64: xor    $[[T1:[0-9]+]], $4, $[[T0]] | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 51 | ; MIPS64: sltiu  $[[T2:[0-9]+]], $[[T1]], 1 | 
|  | 52 | ; MIPS64: dsll   $[[T3:[0-9]+]], $[[T2]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 53 | ; MIPS64: jr     $ra | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 54 | ; MIPS64: dsrl   $2, $[[T3]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 55 | %res = icmp eq i64 %a, 42 | 
|  | 56 | %res2 = zext i1 %res to i64 | 
|  | 57 | ret i64 %res2 | 
|  | 58 | } | 
|  | 59 |  | 
|  | 60 | define i64 @cmpne(i64 %a, i64 %b) nounwind { | 
|  | 61 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 62 | ; ALL-LABEL: cmpne: | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 63 | ; OCTEON: jr     $ra | 
|  | 64 | ; OCTEON: sne    $2, $4, $5 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 65 | ; MIPS64: xor    $[[T0:[0-9]+]], $4, $5 | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 66 | ; MIPS64: sltu   $[[T1:[0-9]+]], $zero, $[[T0]] | 
|  | 67 | ; MIPS64: dsll   $[[T2:[0-9]+]], $[[T1]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 68 | ; MIPS64: jr     $ra | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 69 | ; MIPS64: dsrl   $2, $[[T2]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 70 | %res = icmp ne i64 %a, %b | 
|  | 71 | %res2 = zext i1 %res to i64 | 
|  | 72 | ret i64 %res2 | 
|  | 73 | } | 
|  | 74 |  | 
|  | 75 | define i64 @cmpnei(i64 %a) nounwind { | 
|  | 76 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 77 | ; ALL-LABEL: cmpnei: | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 78 | ; OCTEON: jr     $ra | 
|  | 79 | ; OCTEON: snei   $2, $4, 42 | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 80 | ; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 42 | 
|  | 81 | ; MIPS64: xor    $[[T1:[0-9]+]], $4, $[[T0]] | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 82 | ; MIPS64: sltu   $[[T2:[0-9]+]], $zero, $[[T1]] | 
|  | 83 | ; MIPS64: dsll   $[[T3:[0-9]+]], $[[T2]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 84 | ; MIPS64: jr     $ra | 
| Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 85 | ; MIPS64: dsrl   $2, $[[T3]], 32 | 
| Kai Nacke | 755b6e8 | 2015-01-14 10:19:09 +0000 | [diff] [blame] | 86 | %res = icmp ne i64 %a, 42 | 
|  | 87 | %res2 = zext i1 %res to i64 | 
|  | 88 | ret i64 %res2 | 
|  | 89 | } | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 90 |  | 
|  | 91 | define i64 @bbit0(i64 %a) nounwind { | 
|  | 92 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 93 | ; ALL-LABEL: bbit0: | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 94 | ; OCTEON: bbit0   $4, 3, $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 95 | ; MIPS64: andi  $[[T0:[0-9]+]], $4, 8 | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 96 | ; MIPS64: bnez  $[[T0]], $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 97 | %bit = and i64 %a, 8 | 
|  | 98 | %res = icmp eq i64 %bit, 0 | 
|  | 99 | br i1 %res, label %endif, label %if | 
|  | 100 | if: | 
|  | 101 | ret i64 48 | 
|  | 102 |  | 
|  | 103 | endif: | 
|  | 104 | ret i64 12 | 
|  | 105 | } | 
|  | 106 |  | 
|  | 107 | define i64 @bbit032(i64 %a) nounwind { | 
|  | 108 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 109 | ; ALL-LABEL: bbit032: | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 110 | ; OCTEON: bbit032 $4, 3, $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 111 | ; MIPS64: daddiu  $[[T0:[0-9]+]], $zero, 1 | 
|  | 112 | ; MIPS64: dsll    $[[T1:[0-9]+]], $[[T0]], 35 | 
|  | 113 | ; MIPS64: and     $[[T2:[0-9]+]], $4, $[[T1]] | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 114 | ; MIPS64: bnez    $[[T2]], $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 115 | %bit = and i64 %a, 34359738368 | 
|  | 116 | %res = icmp eq i64 %bit, 0 | 
|  | 117 | br i1 %res, label %endif, label %if | 
|  | 118 | if: | 
|  | 119 | ret i64 48 | 
|  | 120 |  | 
|  | 121 | endif: | 
|  | 122 | ret i64 12 | 
|  | 123 | } | 
|  | 124 |  | 
|  | 125 | define i64 @bbit1(i64 %a) nounwind { | 
|  | 126 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 127 | ; ALL-LABEL: bbit1: | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 128 | ; OCTEON: bbit1 $4, 3, $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 129 | ; MIPS64: andi  $[[T0:[0-9]+]], $4, 8 | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 130 | ; MIPS64: beqz  $[[T0]], $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 131 | %bit = and i64 %a, 8 | 
|  | 132 | %res = icmp ne i64 %bit, 0 | 
|  | 133 | br i1 %res, label %endif, label %if | 
|  | 134 | if: | 
|  | 135 | ret i64 48 | 
|  | 136 |  | 
|  | 137 | endif: | 
|  | 138 | ret i64 12 | 
|  | 139 | } | 
|  | 140 |  | 
|  | 141 | define i64 @bbit132(i64 %a) nounwind { | 
|  | 142 | entry: | 
| Kai Nacke | e7a6478 | 2015-01-20 16:14:02 +0000 | [diff] [blame] | 143 | ; ALL-LABEL: bbit132: | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 144 | ; OCTEON: bbit132 $4, 3, $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 145 | ; MIPS64: daddiu  $[[T0:[0-9]+]], $zero, 1 | 
|  | 146 | ; MIPS64: dsll    $[[T1:[0-9]+]], $[[T0]], 35 | 
|  | 147 | ; MIPS64: and     $[[T2:[0-9]+]], $4, $[[T1]] | 
| Daniel Sanders | 69c6008 | 2015-05-20 14:18:59 +0000 | [diff] [blame] | 148 | ; MIPS64: beqz    $[[T2]], $[[BB0:BB[0-9_]+]] | 
| Kai Nacke | 63072f8 | 2015-01-20 16:10:51 +0000 | [diff] [blame] | 149 | %bit = and i64 %a, 34359738368 | 
|  | 150 | %res = icmp ne i64 %bit, 0 | 
|  | 151 | br i1 %res, label %endif, label %if | 
|  | 152 | if: | 
|  | 153 | ret i64 48 | 
|  | 154 |  | 
|  | 155 | endif: | 
|  | 156 | ret i64 12 | 
|  | 157 | } |