1; RUN: llc < %s -march=msp430 | FileCheck %s 2target datalayout = "e-p:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:16:32" 3target triple = "msp430-generic-generic" 4 5@foo8 = external global i8 6@bar8 = external global i8 7 8define 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 17define 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 26define 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 35define 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 45define 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 55define 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 65define 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 75define 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 89define 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 98define 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 107define 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 116define 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 126define 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 136define 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 146define 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 156define 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