1; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s 2; RUN: llc -O2 -march=bpfel -mcpu=v3 < %s | FileCheck %s 3; 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; int or(int a, int b) 55; { 56; return a | b; 57; } 58; 59; int or_i(int a) 60; { 61; return a | 0xff; 62; } 63; 64; int xor(int a, int b) 65; { 66; return a ^ b; 67; } 68; 69; int xor_i(int a) 70; { 71; return a ^ 0xfff; 72; } 73; 74; int and(int a, int b) 75; { 76; return a & b; 77; } 78; 79; int and_i(int a) 80; { 81; return a & 0xffff; 82; } 83; 84; int sll(int a, int b) 85; { 86; return a << b; 87; } 88; 89; int sll_i(int a) 90; { 91; return a << 17; 92; } 93; 94; unsigned srl(unsigned a, unsigned b) 95; { 96; return a >> b; 97; } 98; 99; unsigned srl_i(unsigned a, unsigned b) 100; { 101; return a >> 31; 102; } 103; 104; int sra(int a, int b) 105; { 106; return a >> b; 107; } 108; 109; int sra_i(int a, int b) 110; { 111; return a >> 7; 112; } 113; 114; int neg(int a) 115; { 116; return -a; 117; } 118 119; Function Attrs: norecurse nounwind readnone 120define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 { 121entry: 122 ret i32 %a 123; CHECK: w{{[0-9]+}} = w{{[0-9]+}} 124} 125 126; Function Attrs: norecurse nounwind readnone 127define dso_local i32 @mov_ri() local_unnamed_addr #0 { 128entry: 129 ret i32 255 130; CHECK: w{{[0-9]+}} = 255 131} 132 133; Function Attrs: norecurse nounwind readnone 134define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 { 135entry: 136 %add = add nsw i32 %b, %a 137; CHECK: w{{[0-9]+}} += w{{[0-9]+}} 138 ret i32 %add 139} 140 141; Function Attrs: norecurse nounwind readnone 142define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 { 143entry: 144 %add = add nsw i32 %a, 2147483647 145; CHECK: w{{[0-9]+}} += 2147483647 146 ret i32 %add 147} 148 149; Function Attrs: norecurse nounwind readnone 150define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 { 151entry: 152 %sub = sub nsw i32 %a, %b 153; CHECK: w{{[0-9]+}} -= w{{[0-9]+}} 154 ret i32 %sub 155} 156 157; Function Attrs: norecurse nounwind readnone 158define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 { 159entry: 160 %sub = add i32 %a, 1 161; CHECK: w{{[0-9]+}} += 1 162 ret i32 %sub 163} 164 165; Function Attrs: norecurse nounwind readnone 166define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 { 167entry: 168 %mul = mul nsw i32 %b, %a 169; CHECK: w{{[0-9]+}} *= w{{[0-9]+}} 170 ret i32 %mul 171} 172 173; Function Attrs: norecurse nounwind readnone 174define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 { 175entry: 176 %mul = mul nsw i32 %a, 15 177; CHECK: w{{[0-9]+}} *= 15 178 ret i32 %mul 179} 180 181; Function Attrs: norecurse nounwind readnone 182define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 { 183entry: 184 %div = udiv i32 %a, %b 185; CHECK: w{{[0-9]+}} /= w{{[0-9]+}} 186 ret i32 %div 187} 188 189; Function Attrs: norecurse nounwind readnone 190define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 { 191entry: 192 %div = udiv i32 %a, 15 193; CHECK: w{{[0-9]+}} /= 15 194 ret i32 %div 195} 196 197; Function Attrs: norecurse nounwind readnone 198define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 { 199entry: 200 %or = or i32 %b, %a 201; CHECK: w{{[0-9]+}} |= w{{[0-9]+}} 202 ret i32 %or 203} 204 205; Function Attrs: norecurse nounwind readnone 206define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 { 207entry: 208 %or = or i32 %a, 255 209; CHECK: w{{[0-9]+}} |= 255 210 ret i32 %or 211} 212 213; Function Attrs: norecurse nounwind readnone 214define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 { 215entry: 216 %xor = xor i32 %b, %a 217; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}} 218 ret i32 %xor 219} 220 221; Function Attrs: norecurse nounwind readnone 222define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 { 223entry: 224 %xor = xor i32 %a, 4095 225; CHECK: w{{[0-9]+}} ^= 4095 226 ret i32 %xor 227} 228 229; Function Attrs: norecurse nounwind readnone 230define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 { 231entry: 232 %and = and i32 %b, %a 233; CHECK: w{{[0-9]+}} &= w{{[0-9]+}} 234 ret i32 %and 235} 236 237; Function Attrs: norecurse nounwind readnone 238define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 { 239entry: 240 %and = and i32 %a, 65535 241; CHECK: w{{[0-9]+}} &= 65535 242 ret i32 %and 243} 244 245; Function Attrs: norecurse nounwind readnone 246define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 { 247entry: 248 %shl = shl i32 %a, %b 249; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}} 250 ret i32 %shl 251} 252 253; Function Attrs: norecurse nounwind readnone 254define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 { 255entry: 256 %shl = shl i32 %a, 17 257; CHECK: w{{[0-9]+}} <<= 17 258 ret i32 %shl 259} 260 261; Function Attrs: norecurse nounwind readnone 262define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 { 263entry: 264 %shr = lshr i32 %a, %b 265; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}} 266 ret i32 %shr 267} 268 269; Function Attrs: norecurse nounwind readnone 270define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 { 271entry: 272 %shr = lshr i32 %a, 31 273; CHECK: w{{[0-9]+}} >>= 31 274 ret i32 %shr 275} 276 277; Function Attrs: norecurse nounwind readnone 278define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 { 279entry: 280 %shr = ashr i32 %a, %b 281; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}} 282 ret i32 %shr 283} 284 285; Function Attrs: norecurse nounwind readnone 286define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 { 287entry: 288 %shr = ashr i32 %a, 7 289; CHECK: w{{[0-9]+}} s>>= 7 290 ret i32 %shr 291} 292 293; Function Attrs: norecurse nounwind readnone 294define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 { 295entry: 296 %sub = sub nsw i32 0, %a 297; CHECK: w{{[0-9]+}} = -w{{[0-9]+}} 298 ret i32 %sub 299} 300