326 lines · plain
1; RUN: llc -O2 -mtriple=bpfel -mattr=+alu32 < %s | FileCheck %s2; RUN: llc -O2 -mtriple=bpfel -mcpu=v3 < %s | FileCheck %s3;4; int mov(int a)5; {6; return a;7; }8;9; int mov_ri(void)10; {11; return 0xff;12; }13;14; int add(int a, int b)15; {16; return a + b;17; }18;19; int add_i(int a)20; {21; return a + 0x7fffffff;22; }23;24; int sub(int a, int b)25; {26; return a - b;27; }28;29; int sub_i(int a)30; {31; return a - 0xffffffff;32; }33;34; int mul(int a, int b)35; {36; return a * b;37; }38;39; int mul_i(int a)40; {41; return a * 0xf;42; }43;44; unsigned div(unsigned a, unsigned b)45; {46; return a / b;47; }48;49; unsigned div_i(unsigned a)50; {51; return a / 0xf;52; }53;54; unsigned rem(unsigned a, unsigned b)55; {56; return a % b;57; }58;59; unsigned rem_i(unsigned a)60; {61; return a % 0xf;62; }63;64; int or(int a, int b)65; {66; return a | b;67; }68;69; int or_i(int a)70; {71; return a | 0xff;72; }73;74; int xor(int a, int b)75; {76; return a ^ b;77; }78;79; int xor_i(int a)80; {81; return a ^ 0xfff;82; }83;84; int and(int a, int b)85; {86; return a & b;87; }88;89; int and_i(int a)90; {91; return a & 0xffff;92; }93;94; int sll(int a, int b)95; {96; return a << b;97; }98;99; int sll_i(int a)100; {101; return a << 17;102; }103;104; unsigned srl(unsigned a, unsigned b)105; {106; return a >> b;107; }108;109; unsigned srl_i(unsigned a, unsigned b)110; {111; return a >> 31;112; }113;114; int sra(int a, int b)115; {116; return a >> b;117; }118;119; int sra_i(int a, int b)120; {121; return a >> 7;122; }123;124; int neg(int a)125; {126; return -a;127; }128 129; Function Attrs: norecurse nounwind readnone130define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 {131entry:132 ret i32 %a133; CHECK: w{{[0-9]+}} = w{{[0-9]+}}134}135 136; Function Attrs: norecurse nounwind readnone137define dso_local i32 @mov_ri() local_unnamed_addr #0 {138entry:139 ret i32 255140; CHECK: w{{[0-9]+}} = 255141}142 143; Function Attrs: norecurse nounwind readnone144define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 {145entry:146 %add = add nsw i32 %b, %a147; CHECK: w{{[0-9]+}} += w{{[0-9]+}}148 ret i32 %add149}150 151; Function Attrs: norecurse nounwind readnone152define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 {153entry:154 %add = add nsw i32 %a, 2147483647155; CHECK: w{{[0-9]+}} += 2147483647156 ret i32 %add157}158 159; Function Attrs: norecurse nounwind readnone160define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 {161entry:162 %sub = sub nsw i32 %a, %b163; CHECK: w{{[0-9]+}} -= w{{[0-9]+}}164 ret i32 %sub165}166 167; Function Attrs: norecurse nounwind readnone168define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 {169entry:170 %sub = add i32 %a, 1171; CHECK: w{{[0-9]+}} += 1172 ret i32 %sub173}174 175; Function Attrs: norecurse nounwind readnone176define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 {177entry:178 %mul = mul nsw i32 %b, %a179; CHECK: w{{[0-9]+}} *= w{{[0-9]+}}180 ret i32 %mul181}182 183; Function Attrs: norecurse nounwind readnone184define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 {185entry:186 %mul = mul nsw i32 %a, 15187; CHECK: w{{[0-9]+}} *= 15188 ret i32 %mul189}190 191; Function Attrs: norecurse nounwind readnone192define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 {193entry:194 %div = udiv i32 %a, %b195; CHECK: w{{[0-9]+}} /= w{{[0-9]+}}196 ret i32 %div197}198 199; Function Attrs: norecurse nounwind readnone200define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 {201entry:202 %div = udiv i32 %a, 15203; CHECK-NOT: w{{[0-9]+}} /= 15204 ret i32 %div205}206 207; Function Attrs: norecurse nounwind readnone208define dso_local i32 @rem(i32 %a, i32 %b) local_unnamed_addr #0 {209entry:210 %rem = urem i32 %a, %b211; CHECK: w{{[0-9]+}} %= w{{[0-9]+}}212 ret i32 %rem213}214 215; Function Attrs: norecurse nounwind readnone216define dso_local i32 @rem_i(i32 %a) local_unnamed_addr #0 {217entry:218 %rem = urem i32 %a, 15219; CHECK-NOT: w{{[0-9]+}} %= 15220 ret i32 %rem221}222 223; Function Attrs: norecurse nounwind readnone224define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 {225entry:226 %or = or i32 %b, %a227; CHECK: w{{[0-9]+}} |= w{{[0-9]+}}228 ret i32 %or229}230 231; Function Attrs: norecurse nounwind readnone232define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 {233entry:234 %or = or i32 %a, 255235; CHECK: w{{[0-9]+}} |= 255236 ret i32 %or237}238 239; Function Attrs: norecurse nounwind readnone240define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 {241entry:242 %xor = xor i32 %b, %a243; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}}244 ret i32 %xor245}246 247; Function Attrs: norecurse nounwind readnone248define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 {249entry:250 %xor = xor i32 %a, 4095251; CHECK: w{{[0-9]+}} ^= 4095252 ret i32 %xor253}254 255; Function Attrs: norecurse nounwind readnone256define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 {257entry:258 %and = and i32 %b, %a259; CHECK: w{{[0-9]+}} &= w{{[0-9]+}}260 ret i32 %and261}262 263; Function Attrs: norecurse nounwind readnone264define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 {265entry:266 %and = and i32 %a, 65535267; CHECK: w{{[0-9]+}} &= 65535268 ret i32 %and269}270 271; Function Attrs: norecurse nounwind readnone272define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 {273entry:274 %shl = shl i32 %a, %b275; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}}276 ret i32 %shl277}278 279; Function Attrs: norecurse nounwind readnone280define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 {281entry:282 %shl = shl i32 %a, 17283; CHECK: w{{[0-9]+}} <<= 17284 ret i32 %shl285}286 287; Function Attrs: norecurse nounwind readnone288define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 {289entry:290 %shr = lshr i32 %a, %b291; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}}292 ret i32 %shr293}294 295; Function Attrs: norecurse nounwind readnone296define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 {297entry:298 %shr = lshr i32 %a, 31299; CHECK: w{{[0-9]+}} >>= 31300 ret i32 %shr301}302 303; Function Attrs: norecurse nounwind readnone304define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 {305entry:306 %shr = ashr i32 %a, %b307; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}}308 ret i32 %shr309}310 311; Function Attrs: norecurse nounwind readnone312define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 {313entry:314 %shr = ashr i32 %a, 7315; CHECK: w{{[0-9]+}} s>>= 7316 ret i32 %shr317}318 319; Function Attrs: norecurse nounwind readnone320define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 {321entry:322 %sub = sub nsw i32 0, %a323; CHECK: w{{[0-9]+}} = -w{{[0-9]+}}324 ret i32 %sub325}326