brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · f11fb61 Raw
316 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 %s -o - | FileCheck %s --check-prefix=RV323; RUN: llc -mtriple=riscv64 %s -o - | FileCheck %s --check-prefix=RV644 5define i32 @xori64i32(i64 %a) {6; RV32-LABEL: xori64i32:7; RV32:       # %bb.0:8; RV32-NEXT:    srai a1, a1, 319; RV32-NEXT:    lui a0, 52428810; RV32-NEXT:    addi a0, a0, -111; RV32-NEXT:    xor a0, a1, a012; RV32-NEXT:    ret13;14; RV64-LABEL: xori64i32:15; RV64:       # %bb.0:16; RV64-NEXT:    srai a0, a0, 6317; RV64-NEXT:    lui a1, 52428818; RV64-NEXT:    addiw a1, a1, -119; RV64-NEXT:    xor a0, a0, a120; RV64-NEXT:    ret21  %shr4 = ashr i64 %a, 6322  %conv5 = trunc i64 %shr4 to i3223  %xor = xor i32 %conv5, 214748364724  ret i32 %xor25}26 27define i64 @selecti64i64(i64 %a) {28; RV32-LABEL: selecti64i64:29; RV32:       # %bb.0:30; RV32-NEXT:    srai a1, a1, 3131; RV32-NEXT:    lui a0, 52428832; RV32-NEXT:    addi a0, a0, -133; RV32-NEXT:    xor a0, a1, a034; RV32-NEXT:    ret35;36; RV64-LABEL: selecti64i64:37; RV64:       # %bb.0:38; RV64-NEXT:    srai a0, a0, 6339; RV64-NEXT:    lui a1, 52428840; RV64-NEXT:    addiw a1, a1, -141; RV64-NEXT:    xor a0, a0, a142; RV64-NEXT:    ret43  %c = icmp sgt i64 %a, -144  %s = select i1 %c, i64 2147483647, i64 -214748364845  ret i64 %s46}47 48define i32 @selecti64i32(i64 %a) {49; RV32-LABEL: selecti64i32:50; RV32:       # %bb.0:51; RV32-NEXT:    srli a1, a1, 3152; RV32-NEXT:    xori a0, a1, 153; RV32-NEXT:    lui a1, 52428854; RV32-NEXT:    sub a0, a1, a055; RV32-NEXT:    ret56;57; RV64-LABEL: selecti64i32:58; RV64:       # %bb.0:59; RV64-NEXT:    srai a0, a0, 6360; RV64-NEXT:    lui a1, 52428861; RV64-NEXT:    addiw a1, a1, -162; RV64-NEXT:    xor a0, a0, a163; RV64-NEXT:    ret64  %c = icmp sgt i64 %a, -165  %s = select i1 %c, i32 2147483647, i32 -214748364866  ret i32 %s67}68 69define i64 @selecti32i64(i32 %a) {70; RV32-LABEL: selecti32i64:71; RV32:       # %bb.0:72; RV32-NEXT:    srai a1, a0, 3173; RV32-NEXT:    lui a0, 52428874; RV32-NEXT:    addi a0, a0, -175; RV32-NEXT:    xor a0, a1, a076; RV32-NEXT:    ret77;78; RV64-LABEL: selecti32i64:79; RV64:       # %bb.0:80; RV64-NEXT:    sraiw a0, a0, 3181; RV64-NEXT:    lui a1, 52428882; RV64-NEXT:    addiw a1, a1, -183; RV64-NEXT:    xor a0, a0, a184; RV64-NEXT:    ret85  %c = icmp sgt i32 %a, -186  %s = select i1 %c, i64 2147483647, i64 -214748364887  ret i64 %s88}89 90 91 92define i8 @xori32i8(i32 %a) {93; RV32-LABEL: xori32i8:94; RV32:       # %bb.0:95; RV32-NEXT:    srai a0, a0, 3196; RV32-NEXT:    xori a0, a0, 8497; RV32-NEXT:    ret98;99; RV64-LABEL: xori32i8:100; RV64:       # %bb.0:101; RV64-NEXT:    sraiw a0, a0, 31102; RV64-NEXT:    xori a0, a0, 84103; RV64-NEXT:    ret104  %shr4 = ashr i32 %a, 31105  %conv5 = trunc i32 %shr4 to i8106  %xor = xor i8 %conv5, 84107  ret i8 %xor108}109 110define i32 @selecti32i32(i32 %a) {111; RV32-LABEL: selecti32i32:112; RV32:       # %bb.0:113; RV32-NEXT:    srai a0, a0, 31114; RV32-NEXT:    xori a0, a0, 84115; RV32-NEXT:    ret116;117; RV64-LABEL: selecti32i32:118; RV64:       # %bb.0:119; RV64-NEXT:    sraiw a0, a0, 31120; RV64-NEXT:    xori a0, a0, 84121; RV64-NEXT:    ret122  %c = icmp sgt i32 %a, -1123  %s = select i1 %c, i32 84, i32 -85124  ret i32 %s125}126 127define i8 @selecti32i8(i32 %a) {128; RV32-LABEL: selecti32i8:129; RV32:       # %bb.0:130; RV32-NEXT:    srai a0, a0, 31131; RV32-NEXT:    xori a0, a0, 84132; RV32-NEXT:    ret133;134; RV64-LABEL: selecti32i8:135; RV64:       # %bb.0:136; RV64-NEXT:    sraiw a0, a0, 31137; RV64-NEXT:    xori a0, a0, 84138; RV64-NEXT:    ret139  %c = icmp sgt i32 %a, -1140  %s = select i1 %c, i8 84, i8 -85141  ret i8 %s142}143 144define i32 @selecti8i32(i8 %a) {145; RV32-LABEL: selecti8i32:146; RV32:       # %bb.0:147; RV32-NEXT:    slli a0, a0, 24148; RV32-NEXT:    srai a0, a0, 31149; RV32-NEXT:    xori a0, a0, 84150; RV32-NEXT:    ret151;152; RV64-LABEL: selecti8i32:153; RV64:       # %bb.0:154; RV64-NEXT:    slli a0, a0, 56155; RV64-NEXT:    srai a0, a0, 63156; RV64-NEXT:    xori a0, a0, 84157; RV64-NEXT:    ret158  %c = icmp sgt i8 %a, -1159  %s = select i1 %c, i32 84, i32 -85160  ret i32 %s161}162 163define i32 @icmpasreq(i32 %input, i32 %a, i32 %b) {164; RV32-LABEL: icmpasreq:165; RV32:       # %bb.0:166; RV32-NEXT:    bltz a0, .LBB8_2167; RV32-NEXT:  # %bb.1:168; RV32-NEXT:    mv a1, a2169; RV32-NEXT:  .LBB8_2:170; RV32-NEXT:    mv a0, a1171; RV32-NEXT:    ret172;173; RV64-LABEL: icmpasreq:174; RV64:       # %bb.0:175; RV64-NEXT:    sext.w a3, a0176; RV64-NEXT:    mv a0, a1177; RV64-NEXT:    bltz a3, .LBB8_2178; RV64-NEXT:  # %bb.1:179; RV64-NEXT:    mv a0, a2180; RV64-NEXT:  .LBB8_2:181; RV64-NEXT:    ret182  %sh = ashr i32 %input, 31183  %c = icmp eq i32 %sh, -1184  %s = select i1 %c, i32 %a, i32 %b185  ret i32 %s186}187 188define i32 @icmpasrne(i32 %input, i32 %a, i32 %b) {189; RV32-LABEL: icmpasrne:190; RV32:       # %bb.0:191; RV32-NEXT:    bgez a0, .LBB9_2192; RV32-NEXT:  # %bb.1:193; RV32-NEXT:    mv a1, a2194; RV32-NEXT:  .LBB9_2:195; RV32-NEXT:    mv a0, a1196; RV32-NEXT:    ret197;198; RV64-LABEL: icmpasrne:199; RV64:       # %bb.0:200; RV64-NEXT:    sext.w a3, a0201; RV64-NEXT:    mv a0, a1202; RV64-NEXT:    bgez a3, .LBB9_2203; RV64-NEXT:  # %bb.1:204; RV64-NEXT:    mv a0, a2205; RV64-NEXT:  .LBB9_2:206; RV64-NEXT:    ret207  %sh = ashr i32 %input, 31208  %c = icmp ne i32 %sh, -1209  %s = select i1 %c, i32 %a, i32 %b210  ret i32 %s211}212 213define i32 @oneusecmp(i32 %a, i32 %b, i32 %d) {214; RV32-LABEL: oneusecmp:215; RV32:       # %bb.0:216; RV32-NEXT:    srai a3, a0, 31217; RV32-NEXT:    xori a3, a3, 127218; RV32-NEXT:    bltz a0, .LBB10_2219; RV32-NEXT:  # %bb.1:220; RV32-NEXT:    mv a2, a1221; RV32-NEXT:  .LBB10_2:222; RV32-NEXT:    add a0, a3, a2223; RV32-NEXT:    ret224;225; RV64-LABEL: oneusecmp:226; RV64:       # %bb.0:227; RV64-NEXT:    sext.w a3, a0228; RV64-NEXT:    sraiw a0, a0, 31229; RV64-NEXT:    xori a0, a0, 127230; RV64-NEXT:    bltz a3, .LBB10_2231; RV64-NEXT:  # %bb.1:232; RV64-NEXT:    mv a2, a1233; RV64-NEXT:  .LBB10_2:234; RV64-NEXT:    addw a0, a0, a2235; RV64-NEXT:    ret236  %c = icmp sle i32 %a, -1237  %s = select i1 %c, i32 -128, i32 127238  %s2 = select i1 %c, i32 %d, i32 %b239  %x = add i32 %s, %s2240  ret i32 %x241}242 243define i32 @xor_branch_imm_ret(i32 %x) nounwind {244; RV32-LABEL: xor_branch_imm_ret:245; RV32:       # %bb.0: # %entry246; RV32-NEXT:    xori a0, a0, -1365247; RV32-NEXT:    beqz a0, .LBB11_2248; RV32-NEXT:  # %bb.1: # %if.then249; RV32-NEXT:    ret250; RV32-NEXT:  .LBB11_2: # %if.end251; RV32-NEXT:    addi sp, sp, -16252; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill253; RV32-NEXT:    call abort254;255; RV64-LABEL: xor_branch_imm_ret:256; RV64:       # %bb.0: # %entry257; RV64-NEXT:    xori a0, a0, -1365258; RV64-NEXT:    sext.w a1, a0259; RV64-NEXT:    beqz a1, .LBB11_2260; RV64-NEXT:  # %bb.1: # %if.then261; RV64-NEXT:    ret262; RV64-NEXT:  .LBB11_2: # %if.end263; RV64-NEXT:    addi sp, sp, -16264; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill265; RV64-NEXT:    call abort266entry:267  %cmp.not = icmp eq i32 %x, -1365268  br i1 %cmp.not, label %if.end, label %if.then269if.then:270  %xor = xor i32 %x, -1365271  ret i32 %xor272if.end:273    tail call void @abort() #2274  unreachable275}276 277define i32 @xor_branch_ret(i32 %x) nounwind {278; RV32-LABEL: xor_branch_ret:279; RV32:       # %bb.0: # %entry280; RV32-NEXT:    li a1, 1281; RV32-NEXT:    slli a1, a1, 11282; RV32-NEXT:    beq a0, a1, .LBB12_2283; RV32-NEXT:  # %bb.1: # %if.then284; RV32-NEXT:    xor a0, a0, a1285; RV32-NEXT:    ret286; RV32-NEXT:  .LBB12_2: # %if.end287; RV32-NEXT:    addi sp, sp, -16288; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill289; RV32-NEXT:    call abort290;291; RV64-LABEL: xor_branch_ret:292; RV64:       # %bb.0: # %entry293; RV64-NEXT:    li a1, 1294; RV64-NEXT:    slli a1, a1, 11295; RV64-NEXT:    sext.w a2, a0296; RV64-NEXT:    beq a2, a1, .LBB12_2297; RV64-NEXT:  # %bb.1: # %if.then298; RV64-NEXT:    xor a0, a0, a1299; RV64-NEXT:    ret300; RV64-NEXT:  .LBB12_2: # %if.end301; RV64-NEXT:    addi sp, sp, -16302; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill303; RV64-NEXT:    call abort304entry:305  %cmp.not = icmp eq i32 %x, 2048306  br i1 %cmp.not, label %if.end, label %if.then307if.then:308  %xor = xor i32 %x, 2048309  ret i32 %xor310if.end:311    tail call void @abort() #2312  unreachable313}314 315declare void @abort()316