1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf -mattr=+fpuv2_df | FileCheck %s --check-prefix=CHECK-DF 4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf -mattr=+fpuv3_df | FileCheck %s --check-prefix=CHECK-DF2 5 6define double @FADD_DOUBLE(double %x, double %y) { 7; CHECK-DF-LABEL: FADD_DOUBLE: 8; CHECK-DF: # %bb.0: # %entry 9; CHECK-DF-NEXT: faddd vr0, vr1, vr0 10; CHECK-DF-NEXT: rts16 11; 12; CHECK-DF2-LABEL: FADD_DOUBLE: 13; CHECK-DF2: # %bb.0: # %entry 14; CHECK-DF2-NEXT: fadd.64 vr0, vr1, vr0 15; CHECK-DF2-NEXT: rts16 16entry: 17 %fadd = fadd double %y, %x 18 ret double %fadd 19} 20 21define double @FADD_DOUBLE_I(double %x) { 22; CHECK-DF-LABEL: FADD_DOUBLE_I: 23; CHECK-DF: # %bb.0: # %entry 24; CHECK-DF-NEXT: grs32 a0, .LCPI1_0 25; CHECK-DF-NEXT: fldd vr1, (a0, 0) 26; CHECK-DF-NEXT: faddd vr0, vr0, vr1 27; CHECK-DF-NEXT: rts16 28; CHECK-DF-NEXT: .p2align 1 29; CHECK-DF-NEXT: # %bb.1: 30; CHECK-DF-NEXT: .p2align 2 31; CHECK-DF-NEXT: .LCPI1_0: 32; CHECK-DF-NEXT: .quad 0xbff0000000000000 # double -1 33; 34; CHECK-DF2-LABEL: FADD_DOUBLE_I: 35; CHECK-DF2: # %bb.0: # %entry 36; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI1_0] 37; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr1 38; CHECK-DF2-NEXT: rts16 39; CHECK-DF2-NEXT: .p2align 1 40; CHECK-DF2-NEXT: # %bb.1: 41; CHECK-DF2-NEXT: .p2align 2 42; CHECK-DF2-NEXT: .LCPI1_0: 43; CHECK-DF2-NEXT: .quad 0xbff0000000000000 # double -1 44entry: 45 %fadd = fadd double %x, -1.0 46 ret double %fadd 47} 48 49define double @FSUB_DOUBLE(double %x, double %y) { 50; CHECK-DF-LABEL: FSUB_DOUBLE: 51; CHECK-DF: # %bb.0: # %entry 52; CHECK-DF-NEXT: fsubd vr0, vr1, vr0 53; CHECK-DF-NEXT: rts16 54; 55; CHECK-DF2-LABEL: FSUB_DOUBLE: 56; CHECK-DF2: # %bb.0: # %entry 57; CHECK-DF2-NEXT: fsub.64 vr0, vr1, vr0 58; CHECK-DF2-NEXT: rts16 59 60entry: 61 %fsub = fsub double %y, %x 62 ret double %fsub 63} 64 65define double @FSUB_DOUBLE_I(double %x) { 66; 67; CHECK-DF-LABEL: FSUB_DOUBLE_I: 68; CHECK-DF: # %bb.0: # %entry 69; CHECK-DF-NEXT: grs32 a0, .LCPI3_0 70; CHECK-DF-NEXT: fldd vr1, (a0, 0) 71; CHECK-DF-NEXT: faddd vr0, vr0, vr1 72; CHECK-DF-NEXT: rts16 73; CHECK-DF-NEXT: .p2align 1 74; CHECK-DF-NEXT: # %bb.1: 75; CHECK-DF-NEXT: .p2align 2 76; CHECK-DF-NEXT: .LCPI3_0: 77; CHECK-DF-NEXT: .quad 0x3ff0000000000000 # double 1 78; 79; CHECK-DF2-LABEL: FSUB_DOUBLE_I: 80; CHECK-DF2: # %bb.0: # %entry 81; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI3_0] 82; CHECK-DF2-NEXT: fadd.64 vr0, vr0, vr1 83; CHECK-DF2-NEXT: rts16 84; CHECK-DF2-NEXT: .p2align 1 85; CHECK-DF2-NEXT: # %bb.1: 86; CHECK-DF2-NEXT: .p2align 2 87; CHECK-DF2-NEXT: .LCPI3_0: 88; CHECK-DF2-NEXT: .quad 0x3ff0000000000000 # double 1 89 90entry: 91 %fsub = fsub double %x, -1.0 92 ret double %fsub 93} 94 95define double @FMUL_DOUBLE(double %x, double %y) { 96; 97; CHECK-DF-LABEL: FMUL_DOUBLE: 98; CHECK-DF: # %bb.0: # %entry 99; CHECK-DF-NEXT: fmuld vr0, vr1, vr0 100; CHECK-DF-NEXT: rts16 101; 102; CHECK-DF2-LABEL: FMUL_DOUBLE: 103; CHECK-DF2: # %bb.0: # %entry 104; CHECK-DF2-NEXT: fmul.64 vr0, vr1, vr0 105; CHECK-DF2-NEXT: rts16 106entry: 107 %fmul = fmul double %y, %x 108 ret double %fmul 109} 110 111define double @FMUL_DOUBLE_I(double %x) { 112; 113; CHECK-DF-LABEL: FMUL_DOUBLE_I: 114; CHECK-DF: # %bb.0: # %entry 115; CHECK-DF-NEXT: grs32 a0, .LCPI5_0 116; CHECK-DF-NEXT: fldd vr1, (a0, 0) 117; CHECK-DF-NEXT: fmuld vr0, vr0, vr1 118; CHECK-DF-NEXT: rts16 119; CHECK-DF-NEXT: .p2align 1 120; CHECK-DF-NEXT: # %bb.1: 121; CHECK-DF-NEXT: .p2align 2 122; CHECK-DF-NEXT: .LCPI5_0: 123; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7 124; 125; CHECK-DF2-LABEL: FMUL_DOUBLE_I: 126; CHECK-DF2: # %bb.0: # %entry 127; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI5_0] 128; CHECK-DF2-NEXT: fmul.64 vr0, vr0, vr1 129; CHECK-DF2-NEXT: rts16 130; CHECK-DF2-NEXT: .p2align 1 131; CHECK-DF2-NEXT: # %bb.1: 132; CHECK-DF2-NEXT: .p2align 2 133; CHECK-DF2-NEXT: .LCPI5_0: 134; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7 135entry: 136 %fmul = fmul double %x, -7.0 137 ret double %fmul 138} 139 140define double @FDIV_DOUBLE(double %x, double %y) { 141; 142; 143; CHECK-DF-LABEL: FDIV_DOUBLE: 144; CHECK-DF: # %bb.0: # %entry 145; CHECK-DF-NEXT: fdivd vr0, vr1, vr0 146; CHECK-DF-NEXT: rts16 147; 148; CHECK-DF2-LABEL: FDIV_DOUBLE: 149; CHECK-DF2: # %bb.0: # %entry 150; CHECK-DF2-NEXT: fdiv.64 vr0, vr1, vr0 151; CHECK-DF2-NEXT: rts16 152 153entry: 154 %fdiv = fdiv double %y, %x 155 ret double %fdiv 156} 157 158define double @FDIV_DOUBLE_I(double %x) { 159; 160; CHECK-DF-LABEL: FDIV_DOUBLE_I: 161; CHECK-DF: # %bb.0: # %entry 162; CHECK-DF-NEXT: grs32 a0, .LCPI7_0 163; CHECK-DF-NEXT: fldd vr1, (a0, 0) 164; CHECK-DF-NEXT: fdivd vr0, vr0, vr1 165; CHECK-DF-NEXT: rts16 166; CHECK-DF-NEXT: .p2align 1 167; CHECK-DF-NEXT: # %bb.1: 168; CHECK-DF-NEXT: .p2align 2 169; CHECK-DF-NEXT: .LCPI7_0: 170; CHECK-DF-NEXT: .quad 0xc01c000000000000 # double -7 171; 172; CHECK-DF2-LABEL: FDIV_DOUBLE_I: 173; CHECK-DF2: # %bb.0: # %entry 174; CHECK-DF2-NEXT: flrw.64 vr1, [.LCPI7_0] 175; CHECK-DF2-NEXT: fdiv.64 vr0, vr0, vr1 176; CHECK-DF2-NEXT: rts16 177; CHECK-DF2-NEXT: .p2align 1 178; CHECK-DF2-NEXT: # %bb.1: 179; CHECK-DF2-NEXT: .p2align 2 180; CHECK-DF2-NEXT: .LCPI7_0: 181; CHECK-DF2-NEXT: .quad 0xc01c000000000000 # double -7 182entry: 183 %fdiv = fdiv double %x, -7.0 184 ret double %fdiv 185} 186 187define double @FNEG_DOUBLE(double %x) { 188; 189; CHECK-DF-LABEL: FNEG_DOUBLE: 190; CHECK-DF: # %bb.0: # %entry 191; CHECK-DF-NEXT: fnegd vr0, vr0 192; CHECK-DF-NEXT: rts16 193; 194; CHECK-DF2-LABEL: FNEG_DOUBLE: 195; CHECK-DF2: # %bb.0: # %entry 196; CHECK-DF2-NEXT: fneg.64 vr0, vr0 197; CHECK-DF2-NEXT: rts16 198entry: 199 %fneg = fneg double %x 200 ret double %fneg 201} 202 203; double --> float 204define float @fptruncR_double_0(double %x) { 205; 206; CHECK-DF-LABEL: fptruncR_double_0: 207; CHECK-DF: # %bb.0: # %entry 208; CHECK-DF-NEXT: fdtos vr0, vr0 209; CHECK-DF-NEXT: rts16 210; 211; CHECK-DF2-LABEL: fptruncR_double_0: 212; CHECK-DF2: # %bb.0: # %entry 213; CHECK-DF2-NEXT: fdtos vr0, vr0 214; CHECK-DF2-NEXT: rts16 215entry: 216 %fptrunc = fptrunc double %x to float 217 ret float %fptrunc 218} 219 220define double @fpextR_double_0(float %x) { 221; 222; CHECK-DF-LABEL: fpextR_double_0: 223; CHECK-DF: # %bb.0: # %entry 224; CHECK-DF-NEXT: fstod vr0, vr0 225; CHECK-DF-NEXT: rts16 226; 227; CHECK-DF2-LABEL: fpextR_double_0: 228; CHECK-DF2: # %bb.0: # %entry 229; CHECK-DF2-NEXT: fstod vr0, vr0 230; CHECK-DF2-NEXT: rts16 231entry: 232 %fpext = fpext float %x to double 233 ret double %fpext 234} 235