1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32 3; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -relocation-model=pic -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32_PIC 4 5define i32 @mod4_0_to_11(i32 %a) { 6; MIPS32-LABEL: mod4_0_to_11: 7; MIPS32: # %bb.0: # %entry 8; MIPS32-NEXT: addiu $sp, $sp, -32 9; MIPS32-NEXT: .cfi_def_cfa_offset 32 10; MIPS32-NEXT: sw $4, 4($sp) # 4-byte Folded Spill 11; MIPS32-NEXT: ori $1, $zero, 7 12; MIPS32-NEXT: ori $2, $zero, 3 13; MIPS32-NEXT: sw $2, 8($sp) # 4-byte Folded Spill 14; MIPS32-NEXT: ori $2, $zero, 2 15; MIPS32-NEXT: sw $2, 12($sp) # 4-byte Folded Spill 16; MIPS32-NEXT: ori $2, $zero, 1 17; MIPS32-NEXT: sw $2, 16($sp) # 4-byte Folded Spill 18; MIPS32-NEXT: ori $2, $zero, 0 19; MIPS32-NEXT: sw $2, 20($sp) # 4-byte Folded Spill 20; MIPS32-NEXT: addiu $2, $zero, 65535 21; MIPS32-NEXT: sw $2, 24($sp) # 4-byte Folded Spill 22; MIPS32-NEXT: ori $2, $zero, 0 23; MIPS32-NEXT: subu $2, $4, $2 24; MIPS32-NEXT: sw $2, 28($sp) # 4-byte Folded Spill 25; MIPS32-NEXT: sltu $1, $1, $2 26; MIPS32-NEXT: bnez $1, $BB0_6 27; MIPS32-NEXT: nop 28; MIPS32-NEXT: # %bb.1: # %entry 29; MIPS32-NEXT: lw $2, 28($sp) # 4-byte Folded Reload 30; MIPS32-NEXT: lui $1, %hi($JTI0_0) 31; MIPS32-NEXT: sll $2, $2, 2 32; MIPS32-NEXT: addu $1, $1, $2 33; MIPS32-NEXT: lw $1, %lo($JTI0_0)($1) 34; MIPS32-NEXT: jr $1 35; MIPS32-NEXT: nop 36; MIPS32-NEXT: $BB0_2: # %sw.bb 37; MIPS32-NEXT: lw $2, 20($sp) # 4-byte Folded Reload 38; MIPS32-NEXT: addiu $sp, $sp, 32 39; MIPS32-NEXT: jr $ra 40; MIPS32-NEXT: nop 41; MIPS32-NEXT: $BB0_3: # %sw.bb1 42; MIPS32-NEXT: lw $2, 16($sp) # 4-byte Folded Reload 43; MIPS32-NEXT: addiu $sp, $sp, 32 44; MIPS32-NEXT: jr $ra 45; MIPS32-NEXT: nop 46; MIPS32-NEXT: $BB0_4: # %sw.bb2 47; MIPS32-NEXT: lw $2, 12($sp) # 4-byte Folded Reload 48; MIPS32-NEXT: addiu $sp, $sp, 32 49; MIPS32-NEXT: jr $ra 50; MIPS32-NEXT: nop 51; MIPS32-NEXT: $BB0_5: # %sw.bb3 52; MIPS32-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 53; MIPS32-NEXT: addiu $sp, $sp, 32 54; MIPS32-NEXT: jr $ra 55; MIPS32-NEXT: nop 56; MIPS32-NEXT: $BB0_6: # %sw.default 57; MIPS32-NEXT: j $BB0_7 58; MIPS32-NEXT: nop 59; MIPS32-NEXT: $BB0_7: # %sw.epilog 60; MIPS32-NEXT: lw $1, 8($sp) # 4-byte Folded Reload 61; MIPS32-NEXT: lw $2, 4($sp) # 4-byte Folded Reload 62; MIPS32-NEXT: ori $3, $zero, 8 63; MIPS32-NEXT: subu $2, $2, $3 64; MIPS32-NEXT: sw $2, 0($sp) # 4-byte Folded Spill 65; MIPS32-NEXT: sltu $1, $1, $2 66; MIPS32-NEXT: bnez $1, $BB0_13 67; MIPS32-NEXT: nop 68; MIPS32-NEXT: # %bb.8: # %sw.epilog 69; MIPS32-NEXT: lw $2, 0($sp) # 4-byte Folded Reload 70; MIPS32-NEXT: lui $1, %hi($JTI0_1) 71; MIPS32-NEXT: sll $2, $2, 2 72; MIPS32-NEXT: addu $1, $1, $2 73; MIPS32-NEXT: lw $1, %lo($JTI0_1)($1) 74; MIPS32-NEXT: jr $1 75; MIPS32-NEXT: nop 76; MIPS32-NEXT: $BB0_9: # %sw.bb4 77; MIPS32-NEXT: lw $2, 20($sp) # 4-byte Folded Reload 78; MIPS32-NEXT: addiu $sp, $sp, 32 79; MIPS32-NEXT: jr $ra 80; MIPS32-NEXT: nop 81; MIPS32-NEXT: $BB0_10: # %sw.bb5 82; MIPS32-NEXT: lw $2, 16($sp) # 4-byte Folded Reload 83; MIPS32-NEXT: addiu $sp, $sp, 32 84; MIPS32-NEXT: jr $ra 85; MIPS32-NEXT: nop 86; MIPS32-NEXT: $BB0_11: # %sw.bb6 87; MIPS32-NEXT: lw $2, 12($sp) # 4-byte Folded Reload 88; MIPS32-NEXT: addiu $sp, $sp, 32 89; MIPS32-NEXT: jr $ra 90; MIPS32-NEXT: nop 91; MIPS32-NEXT: $BB0_12: # %sw.bb7 92; MIPS32-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 93; MIPS32-NEXT: addiu $sp, $sp, 32 94; MIPS32-NEXT: jr $ra 95; MIPS32-NEXT: nop 96; MIPS32-NEXT: $BB0_13: # %sw.default8 97; MIPS32-NEXT: lw $2, 24($sp) # 4-byte Folded Reload 98; MIPS32-NEXT: addiu $sp, $sp, 32 99; MIPS32-NEXT: jr $ra 100; MIPS32-NEXT: nop 101; 102; MIPS32_PIC-LABEL: mod4_0_to_11: 103; MIPS32_PIC: # %bb.0: # %entry 104; MIPS32_PIC-NEXT: lui $2, %hi(_gp_disp) 105; MIPS32_PIC-NEXT: addiu $2, $2, %lo(_gp_disp) 106; MIPS32_PIC-NEXT: addiu $sp, $sp, -40 107; MIPS32_PIC-NEXT: .cfi_def_cfa_offset 40 108; MIPS32_PIC-NEXT: addu $1, $2, $25 109; MIPS32_PIC-NEXT: sw $1, 8($sp) # 4-byte Folded Spill 110; MIPS32_PIC-NEXT: sw $4, 12($sp) # 4-byte Folded Spill 111; MIPS32_PIC-NEXT: ori $1, $zero, 7 112; MIPS32_PIC-NEXT: ori $2, $zero, 3 113; MIPS32_PIC-NEXT: sw $2, 16($sp) # 4-byte Folded Spill 114; MIPS32_PIC-NEXT: ori $2, $zero, 2 115; MIPS32_PIC-NEXT: sw $2, 20($sp) # 4-byte Folded Spill 116; MIPS32_PIC-NEXT: ori $2, $zero, 1 117; MIPS32_PIC-NEXT: sw $2, 24($sp) # 4-byte Folded Spill 118; MIPS32_PIC-NEXT: ori $2, $zero, 0 119; MIPS32_PIC-NEXT: sw $2, 28($sp) # 4-byte Folded Spill 120; MIPS32_PIC-NEXT: addiu $2, $zero, 65535 121; MIPS32_PIC-NEXT: sw $2, 32($sp) # 4-byte Folded Spill 122; MIPS32_PIC-NEXT: ori $2, $zero, 0 123; MIPS32_PIC-NEXT: subu $2, $4, $2 124; MIPS32_PIC-NEXT: sw $2, 36($sp) # 4-byte Folded Spill 125; MIPS32_PIC-NEXT: sltu $1, $1, $2 126; MIPS32_PIC-NEXT: bnez $1, $BB0_6 127; MIPS32_PIC-NEXT: nop 128; MIPS32_PIC-NEXT: # %bb.1: # %entry 129; MIPS32_PIC-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 130; MIPS32_PIC-NEXT: lw $3, 36($sp) # 4-byte Folded Reload 131; MIPS32_PIC-NEXT: lw $1, %got($JTI0_0)($2) 132; MIPS32_PIC-NEXT: sll $3, $3, 2 133; MIPS32_PIC-NEXT: addu $1, $1, $3 134; MIPS32_PIC-NEXT: lw $1, %lo($JTI0_0)($1) 135; MIPS32_PIC-NEXT: addu $1, $1, $2 136; MIPS32_PIC-NEXT: jr $1 137; MIPS32_PIC-NEXT: nop 138; MIPS32_PIC-NEXT: $BB0_2: # %sw.bb 139; MIPS32_PIC-NEXT: lw $2, 28($sp) # 4-byte Folded Reload 140; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 141; MIPS32_PIC-NEXT: jr $ra 142; MIPS32_PIC-NEXT: nop 143; MIPS32_PIC-NEXT: $BB0_3: # %sw.bb1 144; MIPS32_PIC-NEXT: lw $2, 24($sp) # 4-byte Folded Reload 145; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 146; MIPS32_PIC-NEXT: jr $ra 147; MIPS32_PIC-NEXT: nop 148; MIPS32_PIC-NEXT: $BB0_4: # %sw.bb2 149; MIPS32_PIC-NEXT: lw $2, 20($sp) # 4-byte Folded Reload 150; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 151; MIPS32_PIC-NEXT: jr $ra 152; MIPS32_PIC-NEXT: nop 153; MIPS32_PIC-NEXT: $BB0_5: # %sw.bb3 154; MIPS32_PIC-NEXT: lw $2, 16($sp) # 4-byte Folded Reload 155; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 156; MIPS32_PIC-NEXT: jr $ra 157; MIPS32_PIC-NEXT: nop 158; MIPS32_PIC-NEXT: $BB0_6: # %sw.default 159; MIPS32_PIC-NEXT: b $BB0_7 160; MIPS32_PIC-NEXT: nop 161; MIPS32_PIC-NEXT: $BB0_7: # %sw.epilog 162; MIPS32_PIC-NEXT: lw $1, 16($sp) # 4-byte Folded Reload 163; MIPS32_PIC-NEXT: lw $2, 12($sp) # 4-byte Folded Reload 164; MIPS32_PIC-NEXT: ori $3, $zero, 8 165; MIPS32_PIC-NEXT: subu $2, $2, $3 166; MIPS32_PIC-NEXT: sw $2, 4($sp) # 4-byte Folded Spill 167; MIPS32_PIC-NEXT: sltu $1, $1, $2 168; MIPS32_PIC-NEXT: bnez $1, $BB0_13 169; MIPS32_PIC-NEXT: nop 170; MIPS32_PIC-NEXT: # %bb.8: # %sw.epilog 171; MIPS32_PIC-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 172; MIPS32_PIC-NEXT: lw $3, 4($sp) # 4-byte Folded Reload 173; MIPS32_PIC-NEXT: lw $1, %got($JTI0_1)($2) 174; MIPS32_PIC-NEXT: sll $3, $3, 2 175; MIPS32_PIC-NEXT: addu $1, $1, $3 176; MIPS32_PIC-NEXT: lw $1, %lo($JTI0_1)($1) 177; MIPS32_PIC-NEXT: addu $1, $1, $2 178; MIPS32_PIC-NEXT: jr $1 179; MIPS32_PIC-NEXT: nop 180; MIPS32_PIC-NEXT: $BB0_9: # %sw.bb4 181; MIPS32_PIC-NEXT: lw $2, 28($sp) # 4-byte Folded Reload 182; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 183; MIPS32_PIC-NEXT: jr $ra 184; MIPS32_PIC-NEXT: nop 185; MIPS32_PIC-NEXT: $BB0_10: # %sw.bb5 186; MIPS32_PIC-NEXT: lw $2, 24($sp) # 4-byte Folded Reload 187; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 188; MIPS32_PIC-NEXT: jr $ra 189; MIPS32_PIC-NEXT: nop 190; MIPS32_PIC-NEXT: $BB0_11: # %sw.bb6 191; MIPS32_PIC-NEXT: lw $2, 20($sp) # 4-byte Folded Reload 192; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 193; MIPS32_PIC-NEXT: jr $ra 194; MIPS32_PIC-NEXT: nop 195; MIPS32_PIC-NEXT: $BB0_12: # %sw.bb7 196; MIPS32_PIC-NEXT: lw $2, 16($sp) # 4-byte Folded Reload 197; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 198; MIPS32_PIC-NEXT: jr $ra 199; MIPS32_PIC-NEXT: nop 200; MIPS32_PIC-NEXT: $BB0_13: # %sw.default8 201; MIPS32_PIC-NEXT: lw $2, 32($sp) # 4-byte Folded Reload 202; MIPS32_PIC-NEXT: addiu $sp, $sp, 40 203; MIPS32_PIC-NEXT: jr $ra 204; MIPS32_PIC-NEXT: nop 205 206 207entry: 208 switch i32 %a, label %sw.default [ 209 i32 0, label %sw.bb 210 i32 4, label %sw.bb 211 i32 1, label %sw.bb1 212 i32 5, label %sw.bb1 213 i32 2, label %sw.bb2 214 i32 6, label %sw.bb2 215 i32 3, label %sw.bb3 216 i32 7, label %sw.bb3 217 ] 218 219sw.bb: ; preds = %entry, %entry 220 ret i32 0 221 222sw.bb1: ; preds = %entry, %entry 223 ret i32 1 224 225sw.bb2: ; preds = %entry, %entry 226 ret i32 2 227 228sw.bb3: ; preds = %entry, %entry 229 ret i32 3 230 231sw.default: ; preds = %entry 232 br label %sw.epilog 233 234sw.epilog: ; preds = %sw.default 235 switch i32 %a, label %sw.default8 [ 236 i32 8, label %sw.bb4 237 i32 9, label %sw.bb5 238 i32 10, label %sw.bb6 239 i32 11, label %sw.bb7 240 ] 241 242sw.bb4: ; preds = %sw.epilog 243 ret i32 0 244 245sw.bb5: ; preds = %sw.epilog 246 ret i32 1 247 248sw.bb6: ; preds = %sw.epilog 249 ret i32 2 250 251sw.bb7: ; preds = %sw.epilog 252 ret i32 3 253 254sw.default8: ; preds = %sw.epilog 255 ret i32 -1 256 257} 258