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