1 ; RUN: llc < %s -march=msp430 | FileCheck %s 2 target datalayout = "e-p:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:16:32" 3 target triple = "msp430-generic-generic" 4 5 @foo8 = external global i8 6 @bar8 = external global i8 7 8 define i8 @bitbrr(i8 %a, i8 %b) nounwind { 9 %t1 = and i8 %a, %b 10 %t2 = icmp ne i8 %t1, 0 11 %t3 = zext i1 %t2 to i8 12 ret i8 %t3 13 } 14 ; CHECK: bitbrr: 15 ; CHECK: bit.b r14, r15 16 17 define i8 @bitbri(i8 %a) nounwind { 18 %t1 = and i8 %a, 15 19 %t2 = icmp ne i8 %t1, 0 20 %t3 = zext i1 %t2 to i8 21 ret i8 %t3 22 } 23 ; CHECK: bitbri: 24 ; CHECK: bit.b #15, r15 25 26 define i8 @bitbir(i8 %a) nounwind { 27 %t1 = and i8 15, %a 28 %t2 = icmp ne i8 %t1, 0 29 %t3 = zext i1 %t2 to i8 30 ret i8 %t3 31 } 32 ; CHECK: bitbir: 33 ; CHECK: bit.b #15, r15 34 35 define i8 @bitbmi() nounwind { 36 %t1 = load i8* @foo8 37 %t2 = and i8 %t1, 15 38 %t3 = icmp ne i8 %t2, 0 39 %t4 = zext i1 %t3 to i8 40 ret i8 %t4 41 } 42 ; CHECK: bitbmi: 43 ; CHECK: bit.b #15, &foo8 44 45 define i8 @bitbim() nounwind { 46 %t1 = load i8* @foo8 47 %t2 = and i8 15, %t1 48 %t3 = icmp ne i8 %t2, 0 49 %t4 = zext i1 %t3 to i8 50 ret i8 %t4 51 } 52 ; CHECK: bitbim: 53 ; CHECK: bit.b #15, &foo8 54 55 define i8 @bitbrm(i8 %a) nounwind { 56 %t1 = load i8* @foo8 57 %t2 = and i8 %a, %t1 58 %t3 = icmp ne i8 %t2, 0 59 %t4 = zext i1 %t3 to i8 60 ret i8 %t4 61 } 62 ; CHECK: bitbrm: 63 ; CHECK: bit.b &foo8, r15 64 65 define i8 @bitbmr(i8 %a) nounwind { 66 %t1 = load i8* @foo8 67 %t2 = and i8 %t1, %a 68 %t3 = icmp ne i8 %t2, 0 69 %t4 = zext i1 %t3 to i8 70 ret i8 %t4 71 } 72 ; CHECK: bitbmr: 73 ; CHECK: bit.b r15, &foo8 74 75 define i8 @bitbmm() nounwind { 76 %t1 = load i8* @foo8 77 %t2 = load i8* @bar8 78 %t3 = and i8 %t1, %t2 79 %t4 = icmp ne i8 %t3, 0 80 %t5 = zext i1 %t4 to i8 81 ret i8 %t5 82 } 83 ; CHECK: bitbmm: 84 ; CHECK: bit.b &bar8, &foo8 85 86 @foo16 = external global i16 87 @bar16 = external global i16 88 89 define i16 @bitwrr(i16 %a, i16 %b) nounwind { 90 %t1 = and i16 %a, %b 91 %t2 = icmp ne i16 %t1, 0 92 %t3 = zext i1 %t2 to i16 93 ret i16 %t3 94 } 95 ; CHECK: bitwrr: 96 ; CHECK: bit.w r14, r15 97 98 define i16 @bitwri(i16 %a) nounwind { 99 %t1 = and i16 %a, 4080 100 %t2 = icmp ne i16 %t1, 0 101 %t3 = zext i1 %t2 to i16 102 ret i16 %t3 103 } 104 ; CHECK: bitwri: 105 ; CHECK: bit.w #4080, r15 106 107 define i16 @bitwir(i16 %a) nounwind { 108 %t1 = and i16 4080, %a 109 %t2 = icmp ne i16 %t1, 0 110 %t3 = zext i1 %t2 to i16 111 ret i16 %t3 112 } 113 ; CHECK: bitwir: 114 ; CHECK: bit.w #4080, r15 115 116 define i16 @bitwmi() nounwind { 117 %t1 = load i16* @foo16 118 %t2 = and i16 %t1, 4080 119 %t3 = icmp ne i16 %t2, 0 120 %t4 = zext i1 %t3 to i16 121 ret i16 %t4 122 } 123 ; CHECK: bitwmi: 124 ; CHECK: bit.w #4080, &foo16 125 126 define i16 @bitwim() nounwind { 127 %t1 = load i16* @foo16 128 %t2 = and i16 4080, %t1 129 %t3 = icmp ne i16 %t2, 0 130 %t4 = zext i1 %t3 to i16 131 ret i16 %t4 132 } 133 ; CHECK: bitwim: 134 ; CHECK: bit.w #4080, &foo16 135 136 define i16 @bitwrm(i16 %a) nounwind { 137 %t1 = load i16* @foo16 138 %t2 = and i16 %a, %t1 139 %t3 = icmp ne i16 %t2, 0 140 %t4 = zext i1 %t3 to i16 141 ret i16 %t4 142 } 143 ; CHECK: bitwrm: 144 ; CHECK: bit.w &foo16, r15 145 146 define i16 @bitwmr(i16 %a) nounwind { 147 %t1 = load i16* @foo16 148 %t2 = and i16 %t1, %a 149 %t3 = icmp ne i16 %t2, 0 150 %t4 = zext i1 %t3 to i16 151 ret i16 %t4 152 } 153 ; CHECK: bitwmr: 154 ; CHECK: bit.w r15, &foo16 155 156 define i16 @bitwmm() nounwind { 157 %t1 = load i16* @foo16 158 %t2 = load i16* @bar16 159 %t3 = and i16 %t1, %t2 160 %t4 = icmp ne i16 %t3, 0 161 %t5 = zext i1 %t4 to i16 162 ret i16 %t5 163 } 164 ; CHECK: bitwmm: 165 ; CHECK: bit.w &bar16, &foo16 166 167