317 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -O2 -mtriple=riscv64 | FileCheck %s3 4define i32 @native_i64(i64 %a) {5; CHECK-LABEL: native_i64:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: li a1, -18; CHECK-NEXT: beq a0, a1, .LBB0_39; CHECK-NEXT: # %bb.1: # %entry10; CHECK-NEXT: li a1, 111; CHECK-NEXT: bne a0, a1, .LBB0_412; CHECK-NEXT: # %bb.2: # %sw.bb013; CHECK-NEXT: li a0, 014; CHECK-NEXT: ret15; CHECK-NEXT: .LBB0_3: # %sw.bb116; CHECK-NEXT: li a0, 117; CHECK-NEXT: ret18; CHECK-NEXT: .LBB0_4: # %sw.default19; CHECK-NEXT: li a0, -120; CHECK-NEXT: ret21entry:22 switch i64 %a, label %sw.default [23 i64 1, label %sw.bb024 i64 -1, label %sw.bb125 ]26 27sw.bb0:28 br label %return29 30sw.bb1:31 br label %return32 33sw.default:34 br label %return35 36return:37 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]38 ret i32 %retval39}40 41define i32 @native_i32(i32 %a) {42; CHECK-LABEL: native_i32:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: sext.w a0, a045; CHECK-NEXT: li a1, -146; CHECK-NEXT: beq a0, a1, .LBB1_347; CHECK-NEXT: # %bb.1: # %entry48; CHECK-NEXT: li a1, 149; CHECK-NEXT: bne a0, a1, .LBB1_450; CHECK-NEXT: # %bb.2: # %sw.bb051; CHECK-NEXT: li a0, 052; CHECK-NEXT: ret53; CHECK-NEXT: .LBB1_3: # %sw.bb154; CHECK-NEXT: li a0, 155; CHECK-NEXT: ret56; CHECK-NEXT: .LBB1_4: # %sw.default57; CHECK-NEXT: li a0, -158; CHECK-NEXT: ret59entry:60 switch i32 %a, label %sw.default [61 i32 1, label %sw.bb062 i32 -1, label %sw.bb163 ]64 65sw.bb0:66 br label %return67 68sw.bb1:69 br label %return70 71sw.default:72 br label %return73 74return:75 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]76 ret i32 %retval77}78 79define i32 @trunc_i32(i64 %a) {80; CHECK-LABEL: trunc_i32:81; CHECK: # %bb.0: # %entry82; CHECK-NEXT: sext.w a0, a083; CHECK-NEXT: li a1, -184; CHECK-NEXT: beq a0, a1, .LBB2_385; CHECK-NEXT: # %bb.1: # %entry86; CHECK-NEXT: li a1, 187; CHECK-NEXT: bne a0, a1, .LBB2_488; CHECK-NEXT: # %bb.2: # %sw.bb089; CHECK-NEXT: li a0, 090; CHECK-NEXT: ret91; CHECK-NEXT: .LBB2_3: # %sw.bb192; CHECK-NEXT: li a0, 193; CHECK-NEXT: ret94; CHECK-NEXT: .LBB2_4: # %sw.default95; CHECK-NEXT: li a0, -196; CHECK-NEXT: ret97entry:98 %trunc = trunc i64 %a to i3299 switch i32 %trunc, label %sw.default [100 i32 1, label %sw.bb0101 i32 -1, label %sw.bb1102 ]103 104sw.bb0:105 br label %return106 107sw.bb1:108 br label %return109 110sw.default:111 br label %return112 113return:114 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]115 ret i32 %retval116}117 118define i32 @trunc_i17(i64 %a) {119; CHECK-LABEL: trunc_i17:120; CHECK: # %bb.0: # %entry121; CHECK-NEXT: lui a1, 32122; CHECK-NEXT: addi a1, a1, -1123; CHECK-NEXT: and a0, a0, a1124; CHECK-NEXT: beq a0, a1, .LBB3_3125; CHECK-NEXT: # %bb.1: # %entry126; CHECK-NEXT: li a1, 1127; CHECK-NEXT: bne a0, a1, .LBB3_4128; CHECK-NEXT: # %bb.2: # %sw.bb0129; CHECK-NEXT: li a0, 0130; CHECK-NEXT: ret131; CHECK-NEXT: .LBB3_3: # %sw.bb1132; CHECK-NEXT: li a0, 1133; CHECK-NEXT: ret134; CHECK-NEXT: .LBB3_4: # %sw.default135; CHECK-NEXT: li a0, -1136; CHECK-NEXT: ret137entry:138 %trunc = trunc i64 %a to i17139 switch i17 %trunc, label %sw.default [140 i17 1, label %sw.bb0141 i17 -1, label %sw.bb1142 ]143 144sw.bb0:145 br label %return146 147sw.bb1:148 br label %return149 150sw.default:151 br label %return152 153return:154 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]155 ret i32 %retval156}157 158define i32 @trunc_i16(i64 %a) {159; CHECK-LABEL: trunc_i16:160; CHECK: # %bb.0: # %entry161; CHECK-NEXT: lui a1, 16162; CHECK-NEXT: addi a1, a1, -1163; CHECK-NEXT: and a0, a0, a1164; CHECK-NEXT: beq a0, a1, .LBB4_3165; CHECK-NEXT: # %bb.1: # %entry166; CHECK-NEXT: li a1, 1167; CHECK-NEXT: bne a0, a1, .LBB4_4168; CHECK-NEXT: # %bb.2: # %sw.bb0169; CHECK-NEXT: li a0, 0170; CHECK-NEXT: ret171; CHECK-NEXT: .LBB4_3: # %sw.bb1172; CHECK-NEXT: li a0, 1173; CHECK-NEXT: ret174; CHECK-NEXT: .LBB4_4: # %sw.default175; CHECK-NEXT: li a0, -1176; CHECK-NEXT: ret177entry:178 %trunc = trunc i64 %a to i16179 switch i16 %trunc, label %sw.default [180 i16 1, label %sw.bb0181 i16 -1, label %sw.bb1182 ]183 184sw.bb0:185 br label %return186 187sw.bb1:188 br label %return189 190sw.default:191 br label %return192 193return:194 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]195 ret i32 %retval196}197 198 199define i32 @trunc_i12(i64 %a) {200; CHECK-LABEL: trunc_i12:201; CHECK: # %bb.0: # %entry202; CHECK-NEXT: lui a1, 1203; CHECK-NEXT: addi a1, a1, -1204; CHECK-NEXT: and a0, a0, a1205; CHECK-NEXT: beq a0, a1, .LBB5_3206; CHECK-NEXT: # %bb.1: # %entry207; CHECK-NEXT: li a1, 1208; CHECK-NEXT: bne a0, a1, .LBB5_4209; CHECK-NEXT: # %bb.2: # %sw.bb0210; CHECK-NEXT: li a0, 0211; CHECK-NEXT: ret212; CHECK-NEXT: .LBB5_3: # %sw.bb1213; CHECK-NEXT: li a0, 1214; CHECK-NEXT: ret215; CHECK-NEXT: .LBB5_4: # %sw.default216; CHECK-NEXT: li a0, -1217; CHECK-NEXT: ret218entry:219 %trunc = trunc i64 %a to i12220 switch i12 %trunc, label %sw.default [221 i12 1, label %sw.bb0222 i12 -1, label %sw.bb1223 ]224 225sw.bb0:226 br label %return227 228sw.bb1:229 br label %return230 231sw.default:232 br label %return233 234return:235 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]236 ret i32 %retval237}238 239define i32 @trunc_i11(i64 %a) {240; CHECK-LABEL: trunc_i11:241; CHECK: # %bb.0: # %entry242; CHECK-NEXT: andi a0, a0, 2047243; CHECK-NEXT: li a1, 2047244; CHECK-NEXT: beq a0, a1, .LBB6_3245; CHECK-NEXT: # %bb.1: # %entry246; CHECK-NEXT: li a1, 1247; CHECK-NEXT: bne a0, a1, .LBB6_4248; CHECK-NEXT: # %bb.2: # %sw.bb0249; CHECK-NEXT: li a0, 0250; CHECK-NEXT: ret251; CHECK-NEXT: .LBB6_3: # %sw.bb1252; CHECK-NEXT: li a0, 1253; CHECK-NEXT: ret254; CHECK-NEXT: .LBB6_4: # %sw.default255; CHECK-NEXT: li a0, -1256; CHECK-NEXT: ret257entry:258 %trunc = trunc i64 %a to i11259 switch i11 %trunc, label %sw.default [260 i11 1, label %sw.bb0261 i11 -1, label %sw.bb1262 ]263 264sw.bb0:265 br label %return266 267sw.bb1:268 br label %return269 270sw.default:271 br label %return272 273return:274 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]275 ret i32 %retval276}277 278 279define i32 @trunc_i10(i64 %a) {280; CHECK-LABEL: trunc_i10:281; CHECK: # %bb.0: # %entry282; CHECK-NEXT: andi a0, a0, 1023283; CHECK-NEXT: li a1, 1023284; CHECK-NEXT: beq a0, a1, .LBB7_3285; CHECK-NEXT: # %bb.1: # %entry286; CHECK-NEXT: li a1, 1287; CHECK-NEXT: bne a0, a1, .LBB7_4288; CHECK-NEXT: # %bb.2: # %sw.bb0289; CHECK-NEXT: li a0, 0290; CHECK-NEXT: ret291; CHECK-NEXT: .LBB7_3: # %sw.bb1292; CHECK-NEXT: li a0, 1293; CHECK-NEXT: ret294; CHECK-NEXT: .LBB7_4: # %sw.default295; CHECK-NEXT: li a0, -1296; CHECK-NEXT: ret297entry:298 %trunc = trunc i64 %a to i10299 switch i10 %trunc, label %sw.default [300 i10 1, label %sw.bb0301 i10 -1, label %sw.bb1302 ]303 304sw.bb0:305 br label %return306 307sw.bb1:308 br label %return309 310sw.default:311 br label %return312 313return:314 %retval = phi i32 [ -1, %sw.default ], [ 0, %sw.bb0 ], [ 1, %sw.bb1 ]315 ret i32 %retval316}317