1; RUN: llc -march=hexagon < %s | FileCheck %s 2 3; CHECK-LABEL: @t1 4; CHECK: r{{[0-9]+}}:{{[0-9]+}} += dfmpylh(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 5define dso_local double @t1(double %a, double %b, double %c) local_unnamed_addr #0 { 6entry: 7 %0 = tail call double @llvm.hexagon.F2.dfmpylh(double %a, double %b, double %c) #2 8 ret double %0 9} 10 11declare double @llvm.hexagon.F2.dfmpylh(double, double, double) #1 12 13; CHECK-LABEL: @t2 14; CHECK: r{{[0-9]+}}:{{[0-9]+}} += dfmpyhh(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 15define dso_local double @t2(double %a, double %b, double %c) local_unnamed_addr #0 { 16entry: 17 %0 = tail call double @llvm.hexagon.F2.dfmpyhh(double %a, double %b, double %c) #2 18 ret double %0 19} 20 21declare double @llvm.hexagon.F2.dfmpyhh(double, double, double) #1 22 23; CHECK-LABEL: @t3 24; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmax(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 25define dso_local double @t3(double %a, double %b) local_unnamed_addr #0 { 26entry: 27 %0 = tail call double @llvm.hexagon.F2.dfmax(double %a, double %b) #2 28 ret double %0 29} 30 31declare double @llvm.hexagon.F2.dfmax(double, double) #1 32 33; CHECK-LABEL: @t4 34; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmin(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 35define dso_local double @t4(double %a, double %b) local_unnamed_addr #0 { 36entry: 37 %0 = tail call double @llvm.hexagon.F2.dfmin(double %a, double %b) #2 38 ret double %0 39} 40 41declare double @llvm.hexagon.F2.dfmin(double, double) #1 42 43; CHECK-LABEL: @t5 44; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmpyfix(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 45define dso_local double @t5(double %a, double %b) local_unnamed_addr #0 { 46entry: 47 %0 = tail call double @llvm.hexagon.F2.dfmpyfix(double %a, double %b) #2 48 ret double %0 49} 50 51declare double @llvm.hexagon.F2.dfmpyfix(double, double) #1 52 53; CHECK-LABEL: @t6 54; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmpyll(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}) 55define dso_local double @t6(double %a, double %b) local_unnamed_addr #0 { 56entry: 57 %0 = tail call double @llvm.hexagon.F2.dfmpyll(double %a, double %b) #2 58 ret double %0 59} 60 61declare double @llvm.hexagon.F2.dfmpyll(double, double) #1 62 63; CHECK-LABEL: @t7 64; CHECK:r{{[0-9]+}}:{{[0-9]+}} = cmpyrw(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}*) 65define dso_local i64 @t7(i64 %a, i64 %b) local_unnamed_addr #0 { 66entry: 67 %0 = tail call i64 @llvm.hexagon.M7.vdmpy(i64 %a, i64 %b) 68 ret i64 %0 69} 70 71declare i64 @llvm.hexagon.M7.vdmpy(i64, i64) #1 72 73; CHECK-LABEL: @t8 74; CHECK:r{{[0-9]+}}:{{[0-9]+}} += cmpyrw(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}*) 75define dso_local i64 @t8(i64 %a, i64 %b, i64 %c) local_unnamed_addr #0 { 76entry: 77 %0 = tail call i64 @llvm.hexagon.M7.vdmpy.acc(i64 %a, i64 %b, i64 %c) 78 ret i64 %0 79} 80 81declare i64 @llvm.hexagon.M7.vdmpy.acc(i64, i64, i64) #1 82 83; CHECK-LABEL: @t9 84; CHECK: r1:0 = cmpyrw(r1:0,r3:2) 85define i64 @t9(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 86entry: 87 %0 = tail call i64 @llvm.hexagon.M7.dcmpyrw(i64 %rss, i64 %rtt) 88 ret i64 %0 89} 90 91declare i64 @llvm.hexagon.M7.dcmpyrw(i64, i64) #1 92 93; CHECK-LABEL: @t10 94; CHECK: r1:0 += cmpyrw(r3:2,r5:4) 95define i64 @t10(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 { 96entry: 97 %0 = tail call i64 @llvm.hexagon.M7.dcmpyrw.acc(i64 %rxx, i64 %rss, i64 %rtt) 98 ret i64 %0 99} 100 101declare i64 @llvm.hexagon.M7.dcmpyrw.acc(i64, i64, i64) #1 102 103; CHECK-LABEL: @t11 104; CHECK: r1:0 = cmpyrw(r1:0,r3:2*) 105define i64 @t11(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 106entry: 107 %0 = tail call i64 @llvm.hexagon.M7.dcmpyrwc(i64 %rss, i64 %rtt) 108 ret i64 %0 109} 110 111declare i64 @llvm.hexagon.M7.dcmpyrwc(i64, i64) #1 112 113; CHECK-LABEL: @t12 114; CHECK: r1:0 += cmpyrw(r3:2,r5:4*) 115define i64 @t12(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 { 116entry: 117 %0 = tail call i64 @llvm.hexagon.M7.dcmpyrwc.acc(i64 %rxx, i64 %rss, i64 %rtt) 118 ret i64 %0 119} 120 121declare i64 @llvm.hexagon.M7.dcmpyrwc.acc(i64, i64, i64) #1 122 123; CHECK-LABEL: @t13 124; CHECK: r1:0 = cmpyiw(r1:0,r3:2) 125define i64 @t13(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 126entry: 127 %0 = tail call i64 @llvm.hexagon.M7.dcmpyiw(i64 %rss, i64 %rtt) 128 ret i64 %0 129} 130 131declare i64 @llvm.hexagon.M7.dcmpyiw(i64, i64) #1 132 133; CHECK-LABEL: @t14 134; CHECK: r1:0 += cmpyiw(r3:2,r5:4) 135define i64 @t14(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 { 136entry: 137 %0 = tail call i64 @llvm.hexagon.M7.dcmpyiw.acc(i64 %rxx, i64 %rss, i64 %rtt) 138 ret i64 %0 139} 140 141declare i64 @llvm.hexagon.M7.dcmpyiw.acc(i64, i64, i64) #1 142 143; CHECK-LABEL: @t15 144; CHECK: r1:0 = cmpyiw(r1:0,r3:2*) 145define i64 @t15(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 146entry: 147 %0 = tail call i64 @llvm.hexagon.M7.dcmpyiwc(i64 %rss, i64 %rtt) 148 ret i64 %0 149} 150 151declare i64 @llvm.hexagon.M7.dcmpyiwc(i64, i64) #1 152 153; CHECK-LABEL: @t16 154; CHECK: r1:0 += cmpyiw(r3:2,r5:4*) 155define i64 @t16(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 { 156entry: 157 %0 = tail call i64 @llvm.hexagon.M7.dcmpyiwc.acc(i64 %rxx, i64 %rss, i64 %rtt) 158 ret i64 %0 159} 160 161declare i64 @llvm.hexagon.M7.dcmpyiwc.acc(i64, i64, i64) #1 162 163; CHECK-LABEL: @t17 164; CHECK: r0 = cmpyrw(r1:0,r3:2):<<1:sat 165define i32 @t17(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 166entry: 167 %0 = tail call i32 @llvm.hexagon.M7.wcmpyrw(i64 %rss, i64 %rtt) 168 ret i32 %0 169} 170 171declare i32 @llvm.hexagon.M7.wcmpyrw(i64, i64) #1 172 173; CHECK-LABEL: @t18 174; CHECK: r0 = cmpyrw(r1:0,r3:2*):<<1:sat 175define i32 @t18(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 176entry: 177 %0 = tail call i32 @llvm.hexagon.M7.wcmpyrwc(i64 %rss, i64 %rtt) 178 ret i32 %0 179} 180 181declare i32 @llvm.hexagon.M7.wcmpyrwc(i64, i64) #1 182 183; CHECK-LABEL: @t19 184; CHECK: r0 = cmpyiw(r1:0,r3:2):<<1:sat 185define i32 @t19(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 186entry: 187 %0 = tail call i32 @llvm.hexagon.M7.wcmpyiw(i64 %rss, i64 %rtt) 188 ret i32 %0 189} 190 191declare i32 @llvm.hexagon.M7.wcmpyiw(i64, i64) #1 192 193; CHECK-LABEL: @t20 194; CHECK: r0 = cmpyiw(r1:0,r3:2*):<<1:sat 195define i32 @t20(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 196entry: 197 %0 = tail call i32 @llvm.hexagon.M7.wcmpyiwc(i64 %rss, i64 %rtt) 198 ret i32 %0 199} 200 201declare i32 @llvm.hexagon.M7.wcmpyiwc(i64, i64) #1 202 203; CHECK-LABEL: @t21 204; CHECK: r0 = cmpyrw(r1:0,r3:2):<<1:rnd:sat 205define i32 @t21(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 206entry: 207 %0 = tail call i32 @llvm.hexagon.M7.wcmpyrw.rnd(i64 %rss, i64 %rtt) 208 ret i32 %0 209} 210 211declare i32 @llvm.hexagon.M7.wcmpyrw.rnd(i64, i64) #1 212 213; CHECK-LABEL: @t22 214; CHECK: r0 = cmpyrw(r1:0,r3:2*):<<1:rnd:sat 215define i32 @t22(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 216entry: 217 %0 = tail call i32 @llvm.hexagon.M7.wcmpyrwc.rnd(i64 %rss, i64 %rtt) 218 ret i32 %0 219} 220 221declare i32 @llvm.hexagon.M7.wcmpyrwc.rnd(i64, i64) #1 222 223; CHECK-LABEL: @t23 224; CHECK: r0 = cmpyiw(r1:0,r3:2):<<1:rnd:sat 225define i32 @t23(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 226entry: 227 %0 = tail call i32 @llvm.hexagon.M7.wcmpyiw.rnd(i64 %rss, i64 %rtt) 228 ret i32 %0 229} 230 231declare i32 @llvm.hexagon.M7.wcmpyiw.rnd(i64, i64) #1 232 233; CHECK-LABEL: @t24 234; CHECK: r0 = cmpyiw(r1:0,r3:2*):<<1:rnd:sat 235define i32 @t24(i64 %rss, i64 %rtt) local_unnamed_addr #0 { 236entry: 237 %0 = tail call i32 @llvm.hexagon.M7.wcmpyiwc.rnd(i64 %rss, i64 %rtt) 238 ret i32 %0 239} 240 241declare i32 @llvm.hexagon.M7.wcmpyiwc.rnd(i64, i64) #1 242 243; CHECK-LABEL: @t25 244; CHECK: r1:0 = cround(r1:0,#0) 245define i64 @t25(i64 %rss) local_unnamed_addr #0 { 246entry: 247 %0 = tail call i64 @llvm.hexagon.A7.croundd.ri(i64 %rss, i32 0) 248 ret i64 %0 249} 250 251declare i64 @llvm.hexagon.A7.croundd.ri(i64, i32) #1 252 253; CHECK-LABEL: @t26 254; CHECK: r1:0 = cround(r1:0,r2) 255define i64 @t26(i64 %rss, i32 %rt) local_unnamed_addr #0 { 256entry: 257 %0 = tail call i64 @llvm.hexagon.A7.croundd.rr(i64 %rss, i32 %rt) 258 ret i64 %0 259} 260 261declare i64 @llvm.hexagon.A7.croundd.rr(i64, i32) #1 262 263; CHECK-LABEL: @t27 264; CHECK: r0 = clip(r0,#0) 265define i32 @t27(i32 %rs) local_unnamed_addr #0 { 266entry: 267 %0 = tail call i32 @llvm.hexagon.A7.clip(i32 %rs, i32 0) 268 ret i32 %0 269} 270 271declare i32 @llvm.hexagon.A7.clip(i32, i32) #1 272 273; CHECK-LABEL: @t28 274; CHECK: r1:0 = vclip(r1:0,#0) 275define i64 @t28(i64 %rs) local_unnamed_addr #0 { 276entry: 277 %0 = tail call i64 @llvm.hexagon.A7.vclip(i64 %rs, i32 0) 278 ret i64 %0 279} 280 281declare i64 @llvm.hexagon.A7.vclip(i64, i32) #1 282 283attributes #0 = { nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv67" "target-features"="-long-calls" "unsafe-fp-math"="false" "use-soft-float"="false" } 284attributes #1 = { readnone } 285attributes #2 = { nounwind } 286