129 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2;RUN: llc < %s -mtriple=riscv64 -mattr=+f -mcpu=sifive-u74 -target-abi=lp64f \3;RUN: | FileCheck %s --check-prefix=NOFUSION4;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion -mcpu=sifive-u74 \5;RUN: -target-abi=lp64f | FileCheck %s --check-prefix=FUSION6;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion,+use-postra-scheduler -mcpu=sifive-u74 \7;RUN: -misched-postra-direction=topdown -target-abi=lp64f \8;RUN: | FileCheck %s --check-prefixes=FUSION-POSTRA,FUSION-POSTRA-TOPDOWN9;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion,+use-postra-scheduler -mcpu=sifive-u74 \10;RUN: -misched-postra-direction=bottomup -target-abi=lp64f \11;RUN: | FileCheck %s --check-prefixes=FUSION-POSTRA,FUSION-POSTRA-BOTTOMUP12;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion,+use-postra-scheduler -mcpu=sifive-u74 \13;RUN: -misched-postra-direction=bidirectional -target-abi=lp64f \14;RUN: | FileCheck %s --check-prefixes=FUSION-POSTRA,FUSION-POSTRA-BIDIRECTIONAL15;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion -target-abi=lp64f \16;RUN: | FileCheck %s --check-prefix=FUSION-GENERIC17 18@.str = private constant [4 x i8] c"%f\0A\00", align 119 20define void @foo(i32 signext %0, i32 signext %1) {21; NOFUSION-LABEL: foo:22; NOFUSION: # %bb.0:23; NOFUSION-NEXT: lui a0, %hi(.L.str)24; NOFUSION-NEXT: fcvt.s.w fa0, a125; NOFUSION-NEXT: addi a0, a0, %lo(.L.str)26; NOFUSION-NEXT: tail bar27;28; FUSION-LABEL: foo:29; FUSION: # %bb.0:30; FUSION-NEXT: lui a0, %hi(.L.str)31; FUSION-NEXT: addi a0, a0, %lo(.L.str)32; FUSION-NEXT: fcvt.s.w fa0, a133; FUSION-NEXT: tail bar34;35; FUSION-POSTRA-TOPDOWN-LABEL: foo:36; FUSION-POSTRA-TOPDOWN: # %bb.0:37; FUSION-POSTRA-TOPDOWN-NEXT: lui a0, %hi(.L.str)38; FUSION-POSTRA-TOPDOWN-NEXT: addi a0, a0, %lo(.L.str)39; FUSION-POSTRA-TOPDOWN-NEXT: fcvt.s.w fa0, a140; FUSION-POSTRA-TOPDOWN-NEXT: tail bar41;42; FUSION-POSTRA-BOTTOMUP-LABEL: foo:43; FUSION-POSTRA-BOTTOMUP: # %bb.0:44; FUSION-POSTRA-BOTTOMUP-NEXT: fcvt.s.w fa0, a145; FUSION-POSTRA-BOTTOMUP-NEXT: lui a0, %hi(.L.str)46; FUSION-POSTRA-BOTTOMUP-NEXT: addi a0, a0, %lo(.L.str)47; FUSION-POSTRA-BOTTOMUP-NEXT: tail bar48;49; FUSION-POSTRA-BIDIRECTIONAL-LABEL: foo:50; FUSION-POSTRA-BIDIRECTIONAL: # %bb.0:51; FUSION-POSTRA-BIDIRECTIONAL-NEXT: lui a0, %hi(.L.str)52; FUSION-POSTRA-BIDIRECTIONAL-NEXT: addi a0, a0, %lo(.L.str)53; FUSION-POSTRA-BIDIRECTIONAL-NEXT: fcvt.s.w fa0, a154; FUSION-POSTRA-BIDIRECTIONAL-NEXT: tail bar55;56; FUSION-GENERIC-LABEL: foo:57; FUSION-GENERIC: # %bb.0:58; FUSION-GENERIC-NEXT: fcvt.s.w fa0, a159; FUSION-GENERIC-NEXT: lui a0, %hi(.L.str)60; FUSION-GENERIC-NEXT: addi a0, a0, %lo(.L.str)61; FUSION-GENERIC-NEXT: tail bar62 %3 = sitofp i32 %1 to float63 tail call void @bar(ptr @.str, float %3)64 ret void65}66 67declare void @bar(ptr, float)68 69; Test that we prefer lui+addiw over li+slli.70define i32 @test_matint() {71; NOFUSION-LABEL: test_matint:72; NOFUSION: # %bb.0:73; NOFUSION-NEXT: li a0, 174; NOFUSION-NEXT: slli a0, a0, 1175; NOFUSION-NEXT: ret76;77; FUSION-LABEL: test_matint:78; FUSION: # %bb.0:79; FUSION-NEXT: lui a0, 180; FUSION-NEXT: addi a0, a0, -204881; FUSION-NEXT: ret82;83; FUSION-POSTRA-LABEL: test_matint:84; FUSION-POSTRA: # %bb.0:85; FUSION-POSTRA-NEXT: lui a0, 186; FUSION-POSTRA-NEXT: addi a0, a0, -204887; FUSION-POSTRA-NEXT: ret88;89; FUSION-GENERIC-LABEL: test_matint:90; FUSION-GENERIC: # %bb.0:91; FUSION-GENERIC-NEXT: lui a0, 192; FUSION-GENERIC-NEXT: addi a0, a0, -204893; FUSION-GENERIC-NEXT: ret94 ret i32 204895}96 97define void @test_regalloc_hint(i32 noundef signext %0, i32 noundef signext %1) {98; NOFUSION-LABEL: test_regalloc_hint:99; NOFUSION: # %bb.0:100; NOFUSION-NEXT: mv a0, a1101; NOFUSION-NEXT: lui a1, 3014102; NOFUSION-NEXT: addi a1, a1, 334103; NOFUSION-NEXT: tail bar104;105; FUSION-LABEL: test_regalloc_hint:106; FUSION: # %bb.0:107; FUSION-NEXT: mv a0, a1108; FUSION-NEXT: lui a1, 3014109; FUSION-NEXT: addi a1, a1, 334110; FUSION-NEXT: tail bar111;112; FUSION-POSTRA-LABEL: test_regalloc_hint:113; FUSION-POSTRA: # %bb.0:114; FUSION-POSTRA-NEXT: mv a0, a1115; FUSION-POSTRA-NEXT: lui a1, 3014116; FUSION-POSTRA-NEXT: addi a1, a1, 334117; FUSION-POSTRA-NEXT: tail bar118;119; FUSION-GENERIC-LABEL: test_regalloc_hint:120; FUSION-GENERIC: # %bb.0:121; FUSION-GENERIC-NEXT: lui a2, 3014122; FUSION-GENERIC-NEXT: addi a2, a2, 334123; FUSION-GENERIC-NEXT: mv a0, a1124; FUSION-GENERIC-NEXT: mv a1, a2125; FUSION-GENERIC-NEXT: tail bar126 tail call void @bar(i32 noundef signext %1, i32 noundef signext 12345678)127 ret void128}129