brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · d241f11 Raw
219 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s | FileCheck -check-prefix=RV32IF %s3; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s | FileCheck -check-prefix=RV64IF %s4 5define i32 @func_01() {6; RV32IF-LABEL: func_01:7; RV32IF:       # %bb.0:8; RV32IF-NEXT:    frrm a09; RV32IF-NEXT:    lui a1, 6610; RV32IF-NEXT:    slli a0, a0, 211; RV32IF-NEXT:    addi a1, a1, 76912; RV32IF-NEXT:    srl a0, a1, a013; RV32IF-NEXT:    andi a0, a0, 714; RV32IF-NEXT:    ret15;16; RV64IF-LABEL: func_01:17; RV64IF:       # %bb.0:18; RV64IF-NEXT:    frrm a019; RV64IF-NEXT:    lui a1, 6620; RV64IF-NEXT:    slli a0, a0, 221; RV64IF-NEXT:    addi a1, a1, 76922; RV64IF-NEXT:    srl a0, a1, a023; RV64IF-NEXT:    andi a0, a0, 724; RV64IF-NEXT:    ret25  %rm = call i32 @llvm.get.rounding()26  ret i32 %rm27}28 29define i1 @test_get_rounding_sideeffect() #0 {30; RV32IF-LABEL: test_get_rounding_sideeffect:31; RV32IF:       # %bb.0: # %entry32; RV32IF-NEXT:    addi sp, sp, -1633; RV32IF-NEXT:    .cfi_def_cfa_offset 1634; RV32IF-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill35; RV32IF-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill36; RV32IF-NEXT:    .cfi_offset ra, -437; RV32IF-NEXT:    .cfi_offset s0, -838; RV32IF-NEXT:    li a0, 139; RV32IF-NEXT:    call fesetround40; RV32IF-NEXT:    frrm a041; RV32IF-NEXT:    lui a1, 6642; RV32IF-NEXT:    slli a0, a0, 243; RV32IF-NEXT:    addi s0, a1, 76944; RV32IF-NEXT:    srl a0, s0, a045; RV32IF-NEXT:    andi a0, a0, 746; RV32IF-NEXT:    beqz a0, .LBB1_247; RV32IF-NEXT:  # %bb.1:48; RV32IF-NEXT:    li a0, 049; RV32IF-NEXT:    j .LBB1_350; RV32IF-NEXT:  .LBB1_2: # %if.end51; RV32IF-NEXT:    call fesetround52; RV32IF-NEXT:    frrm a053; RV32IF-NEXT:    slli a0, a0, 254; RV32IF-NEXT:    srl a0, s0, a055; RV32IF-NEXT:    andi a0, a0, 756; RV32IF-NEXT:    addi a0, a0, -157; RV32IF-NEXT:    seqz a0, a058; RV32IF-NEXT:  .LBB1_3: # %return59; RV32IF-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload60; RV32IF-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload61; RV32IF-NEXT:    .cfi_restore ra62; RV32IF-NEXT:    .cfi_restore s063; RV32IF-NEXT:    addi sp, sp, 1664; RV32IF-NEXT:    .cfi_def_cfa_offset 065; RV32IF-NEXT:    ret66;67; RV64IF-LABEL: test_get_rounding_sideeffect:68; RV64IF:       # %bb.0: # %entry69; RV64IF-NEXT:    addi sp, sp, -1670; RV64IF-NEXT:    .cfi_def_cfa_offset 1671; RV64IF-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill72; RV64IF-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill73; RV64IF-NEXT:    .cfi_offset ra, -874; RV64IF-NEXT:    .cfi_offset s0, -1675; RV64IF-NEXT:    li a0, 176; RV64IF-NEXT:    call fesetround77; RV64IF-NEXT:    frrm a078; RV64IF-NEXT:    lui a1, 6679; RV64IF-NEXT:    slli a0, a0, 280; RV64IF-NEXT:    addi s0, a1, 76981; RV64IF-NEXT:    srl a0, s0, a082; RV64IF-NEXT:    andi a0, a0, 783; RV64IF-NEXT:    beqz a0, .LBB1_284; RV64IF-NEXT:  # %bb.1:85; RV64IF-NEXT:    li a0, 086; RV64IF-NEXT:    j .LBB1_387; RV64IF-NEXT:  .LBB1_2: # %if.end88; RV64IF-NEXT:    call fesetround89; RV64IF-NEXT:    frrm a090; RV64IF-NEXT:    slli a0, a0, 291; RV64IF-NEXT:    srl a0, s0, a092; RV64IF-NEXT:    andi a0, a0, 793; RV64IF-NEXT:    addi a0, a0, -194; RV64IF-NEXT:    seqz a0, a095; RV64IF-NEXT:  .LBB1_3: # %return96; RV64IF-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload97; RV64IF-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload98; RV64IF-NEXT:    .cfi_restore ra99; RV64IF-NEXT:    .cfi_restore s0100; RV64IF-NEXT:    addi sp, sp, 16101; RV64IF-NEXT:    .cfi_def_cfa_offset 0102; RV64IF-NEXT:    ret103entry:104  %call = tail call i32 @fesetround(i32 noundef 1) #0105  %0 = tail call i32 @llvm.get.rounding() #0106  %cmp.not = icmp eq i32 %0, 0107  br i1 %cmp.not, label %if.end, label %return108 109if.end:110  %call1 = tail call i32 @fesetround(i32 noundef 0) #0111  %1 = tail call i32 @llvm.get.rounding() #0112  %cmp2.not = icmp eq i32 %1, 1113  br label %return114 115return:116  %retval.0 = phi i1 [ false, %entry ], [ %cmp2.not, %if.end ]117  ret i1 %retval.0118}119 120define void @func_02(i32 %rm) {121; RV32IF-LABEL: func_02:122; RV32IF:       # %bb.0:123; RV32IF-NEXT:    slli a0, a0, 2124; RV32IF-NEXT:    lui a1, 66125; RV32IF-NEXT:    addi a1, a1, 769126; RV32IF-NEXT:    srl a0, a1, a0127; RV32IF-NEXT:    andi a0, a0, 7128; RV32IF-NEXT:    fsrm a0129; RV32IF-NEXT:    ret130;131; RV64IF-LABEL: func_02:132; RV64IF:       # %bb.0:133; RV64IF-NEXT:    slli a0, a0, 32134; RV64IF-NEXT:    lui a1, 66135; RV64IF-NEXT:    srli a0, a0, 30136; RV64IF-NEXT:    addi a1, a1, 769137; RV64IF-NEXT:    srl a0, a1, a0138; RV64IF-NEXT:    andi a0, a0, 7139; RV64IF-NEXT:    fsrm a0140; RV64IF-NEXT:    ret141  call void @llvm.set.rounding(i32 %rm)142  ret void143}144 145define void @func_03() {146; RV32IF-LABEL: func_03:147; RV32IF:       # %bb.0:148; RV32IF-NEXT:    fsrmi 1149; RV32IF-NEXT:    ret150;151; RV64IF-LABEL: func_03:152; RV64IF:       # %bb.0:153; RV64IF-NEXT:    fsrmi 1154; RV64IF-NEXT:    ret155  call void @llvm.set.rounding(i32 0)156  ret void157}158 159define void @func_04() {160; RV32IF-LABEL: func_04:161; RV32IF:       # %bb.0:162; RV32IF-NEXT:    fsrmi 0163; RV32IF-NEXT:    ret164;165; RV64IF-LABEL: func_04:166; RV64IF:       # %bb.0:167; RV64IF-NEXT:    fsrmi 0168; RV64IF-NEXT:    ret169  call void @llvm.set.rounding(i32 1)170  ret void171}172 173define void @func_05() {174; RV32IF-LABEL: func_05:175; RV32IF:       # %bb.0:176; RV32IF-NEXT:    fsrmi 3177; RV32IF-NEXT:    ret178;179; RV64IF-LABEL: func_05:180; RV64IF:       # %bb.0:181; RV64IF-NEXT:    fsrmi 3182; RV64IF-NEXT:    ret183  call void @llvm.set.rounding(i32 2)184  ret void185}186 187define void @func_06() {188; RV32IF-LABEL: func_06:189; RV32IF:       # %bb.0:190; RV32IF-NEXT:    fsrmi 2191; RV32IF-NEXT:    ret192;193; RV64IF-LABEL: func_06:194; RV64IF:       # %bb.0:195; RV64IF-NEXT:    fsrmi 2196; RV64IF-NEXT:    ret197  call void @llvm.set.rounding(i32 3)198  ret void199}200 201define void @func_07() {202; RV32IF-LABEL: func_07:203; RV32IF:       # %bb.0:204; RV32IF-NEXT:    fsrmi 4205; RV32IF-NEXT:    ret206;207; RV64IF-LABEL: func_07:208; RV64IF:       # %bb.0:209; RV64IF-NEXT:    fsrmi 4210; RV64IF-NEXT:    ret211  call void @llvm.set.rounding(i32 4)212  ret void213}214 215attributes #0 = { strictfp }216 217declare i32 @fesetround(i32 noundef)218 219