297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=riscv32 -mattr=+m -mattr=+xcvalu -verify-machineinstrs < %s \3; RUN: | FileCheck %s4 5define i32 @abs(i32 %a) {6; CHECK-LABEL: abs:7; CHECK: # %bb.0:8; CHECK-NEXT: cv.abs a0, a09; CHECK-NEXT: ret10 %1 = call i32 @llvm.abs.i32(i32 %a, i1 false)11 ret i32 %112}13 14define i1 @sle(i32 %a, i32 %b) {15; CHECK-LABEL: sle:16; CHECK: # %bb.0:17; CHECK-NEXT: cv.sle a0, a0, a118; CHECK-NEXT: ret19 %1 = icmp sle i32 %a, %b20 ret i1 %121}22 23define i1 @sleu(i32 %a, i32 %b) {24; CHECK-LABEL: sleu:25; CHECK: # %bb.0:26; CHECK-NEXT: cv.sleu a0, a0, a127; CHECK-NEXT: ret28 %1 = icmp ule i32 %a, %b29 ret i1 %130}31 32define i32 @smin(i32 %a, i32 %b) {33; CHECK-LABEL: smin:34; CHECK: # %bb.0:35; CHECK-NEXT: cv.min a0, a0, a136; CHECK-NEXT: ret37 %1 = call i32 @llvm.smin.i32(i32 %a, i32 %b)38 ret i32 %139}40 41define i32 @umin(i32 %a, i32 %b) {42; CHECK-LABEL: umin:43; CHECK: # %bb.0:44; CHECK-NEXT: cv.minu a0, a0, a145; CHECK-NEXT: ret46 %1 = call i32 @llvm.umin.i32(i32 %a, i32 %b)47 ret i32 %148}49 50define i32 @smax(i32 %a, i32 %b) {51; CHECK-LABEL: smax:52; CHECK: # %bb.0:53; CHECK-NEXT: cv.max a0, a0, a154; CHECK-NEXT: ret55 %1 = call i32 @llvm.smax.i32(i32 %a, i32 %b)56 ret i32 %157}58 59define i32 @umax(i32 %a, i32 %b) {60; CHECK-LABEL: umax:61; CHECK: # %bb.0:62; CHECK-NEXT: cv.maxu a0, a0, a163; CHECK-NEXT: ret64 %1 = call i32 @llvm.umax.i32(i32 %a, i32 %b)65 ret i32 %166}67 68define i32 @exths(i16 %a) {69; CHECK-LABEL: exths:70; CHECK: # %bb.0:71; CHECK-NEXT: # kill: def $x11 killed $x1072; CHECK-NEXT: cv.exths a0, a073; CHECK-NEXT: ret74 %1 = sext i16 %a to i3275 ret i32 %176}77 78define i32 @exthz(i16 %a) {79; CHECK-LABEL: exthz:80; CHECK: # %bb.0:81; CHECK-NEXT: # kill: def $x11 killed $x1082; CHECK-NEXT: cv.exthz a0, a083; CHECK-NEXT: ret84 %1 = zext i16 %a to i3285 ret i32 %186}87 88define i32 @extbs(i8 %a) {89; CHECK-LABEL: extbs:90; CHECK: # %bb.0:91; CHECK-NEXT: # kill: def $x11 killed $x1092; CHECK-NEXT: cv.extbs a0, a093; CHECK-NEXT: ret94 %1 = sext i8 %a to i3295 ret i32 %196}97 98define i32 @extbz(i8 %a) {99; CHECK-LABEL: extbz:100; CHECK: # %bb.0:101; CHECK-NEXT: # kill: def $x11 killed $x10102; CHECK-NEXT: cv.extbz a0, a0103; CHECK-NEXT: ret104 %1 = zext i8 %a to i32105 ret i32 %1106}107 108define i32 @test.cv.alu.clip.case.a(i32 %a) {109; CHECK-LABEL: test.cv.alu.clip.case.a:110; CHECK: # %bb.0:111; CHECK-NEXT: cv.clip a0, a0, 5112; CHECK-NEXT: ret113 %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 15)114 ret i32 %1115}116 117define i32 @test.cv.alu.clip.case.b(i32 %a) {118; CHECK-LABEL: test.cv.alu.clip.case.b:119; CHECK: # %bb.0:120; CHECK-NEXT: li a1, 10121; CHECK-NEXT: cv.clipr a0, a0, a1122; CHECK-NEXT: ret123 %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 10)124 ret i32 %1125}126 127define i32 @test.cv.alu.clipu.case.a(i32 %a) {128; CHECK-LABEL: test.cv.alu.clipu.case.a:129; CHECK: # %bb.0:130; CHECK-NEXT: cv.clipu a0, a0, 9131; CHECK-NEXT: ret132 %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 255)133 ret i32 %1134}135 136define i32 @test.cv.alu.clipu.case.b(i32 %a) {137; CHECK-LABEL: test.cv.alu.clipu.case.b:138; CHECK: # %bb.0:139; CHECK-NEXT: li a1, 200140; CHECK-NEXT: cv.clipur a0, a0, a1141; CHECK-NEXT: ret142 %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 200)143 ret i32 %1144}145 146define i32 @test.cv.alu.addN.case.a(i32 %a, i32 %b) {147; CHECK-LABEL: test.cv.alu.addN.case.a:148; CHECK: # %bb.0:149; CHECK-NEXT: cv.addn a0, a0, a1, 15150; CHECK-NEXT: ret151 %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 15)152 ret i32 %1153}154 155define i32 @test.cv.alu.addN.case.b(i32 %a, i32 %b) {156; CHECK-LABEL: test.cv.alu.addN.case.b:157; CHECK: # %bb.0:158; CHECK-NEXT: li a2, 32159; CHECK-NEXT: cv.addnr a0, a1, a2160; CHECK-NEXT: ret161 %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 32)162 ret i32 %1163}164 165define i32 @test.cv.alu.adduN.case.a(i32 %a, i32 %b) {166; CHECK-LABEL: test.cv.alu.adduN.case.a:167; CHECK: # %bb.0:168; CHECK-NEXT: cv.addun a0, a0, a1, 15169; CHECK-NEXT: ret170 %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 15)171 ret i32 %1172}173 174define i32 @test.cv.alu.adduN.case.b(i32 %a, i32 %b) {175; CHECK-LABEL: test.cv.alu.adduN.case.b:176; CHECK: # %bb.0:177; CHECK-NEXT: li a2, 32178; CHECK-NEXT: cv.addunr a0, a1, a2179; CHECK-NEXT: ret180 %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 32)181 ret i32 %1182}183 184define i32 @test.cv.alu.addRN.case.a(i32 %a, i32 %b) {185; CHECK-LABEL: test.cv.alu.addRN.case.a:186; CHECK: # %bb.0:187; CHECK-NEXT: cv.addrn a0, a0, a1, 15188; CHECK-NEXT: ret189 %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 15)190 ret i32 %1191}192 193define i32 @test.cv.alu.addRN.case.b(i32 %a, i32 %b) {194; CHECK-LABEL: test.cv.alu.addRN.case.b:195; CHECK: # %bb.0:196; CHECK-NEXT: li a2, 32197; CHECK-NEXT: cv.addrnr a0, a1, a2198; CHECK-NEXT: ret199 %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 32)200 ret i32 %1201}202 203define i32 @test.cv.alu.adduRN.case.a(i32 %a, i32 %b) {204; CHECK-LABEL: test.cv.alu.adduRN.case.a:205; CHECK: # %bb.0:206; CHECK-NEXT: cv.addurn a0, a0, a1, 15207; CHECK-NEXT: ret208 %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 15)209 ret i32 %1210}211 212define i32 @test.cv.alu.adduRN.case.b(i32 %a, i32 %b) {213; CHECK-LABEL: test.cv.alu.adduRN.case.b:214; CHECK: # %bb.0:215; CHECK-NEXT: li a2, 32216; CHECK-NEXT: cv.addurnr a0, a1, a2217; CHECK-NEXT: ret218 %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 32)219 ret i32 %1220}221 222define i32 @test.cv.alu.subN.case.a(i32 %a, i32 %b) {223; CHECK-LABEL: test.cv.alu.subN.case.a:224; CHECK: # %bb.0:225; CHECK-NEXT: cv.subn a0, a0, a1, 15226; CHECK-NEXT: ret227 %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 15)228 ret i32 %1229}230 231define i32 @test.cv.alu.subN.case.b(i32 %a, i32 %b) {232; CHECK-LABEL: test.cv.alu.subN.case.b:233; CHECK: # %bb.0:234; CHECK-NEXT: li a2, 32235; CHECK-NEXT: cv.subnr a0, a1, a2236; CHECK-NEXT: ret237 %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 32)238 ret i32 %1239}240 241define i32 @test.cv.alu.subuN.case.a(i32 %a, i32 %b) {242; CHECK-LABEL: test.cv.alu.subuN.case.a:243; CHECK: # %bb.0:244; CHECK-NEXT: cv.subun a0, a0, a1, 15245; CHECK-NEXT: ret246 %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 15)247 ret i32 %1248}249 250define i32 @test.cv.alu.subuN.case.b(i32 %a, i32 %b) {251; CHECK-LABEL: test.cv.alu.subuN.case.b:252; CHECK: # %bb.0:253; CHECK-NEXT: li a2, 32254; CHECK-NEXT: cv.subunr a0, a1, a2255; CHECK-NEXT: ret256 %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 32)257 ret i32 %1258}259 260define i32 @test.cv.alu.subRN.case.a(i32 %a, i32 %b) {261; CHECK-LABEL: test.cv.alu.subRN.case.a:262; CHECK: # %bb.0:263; CHECK-NEXT: cv.subrn a0, a0, a1, 15264; CHECK-NEXT: ret265 %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 15)266 ret i32 %1267}268 269define i32 @test.cv.alu.subRN.case.b(i32 %a, i32 %b) {270; CHECK-LABEL: test.cv.alu.subRN.case.b:271; CHECK: # %bb.0:272; CHECK-NEXT: li a2, 32273; CHECK-NEXT: cv.subrnr a0, a1, a2274; CHECK-NEXT: ret275 %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 32)276 ret i32 %1277}278 279define i32 @test.cv.alu.subuRN.case.a(i32 %a, i32 %b) {280; CHECK-LABEL: test.cv.alu.subuRN.case.a:281; CHECK: # %bb.0:282; CHECK-NEXT: cv.suburn a0, a0, a1, 15283; CHECK-NEXT: ret284 %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 15)285 ret i32 %1286}287 288define i32 @test.cv.alu.subuRN.case.b(i32 %a, i32 %b) {289; CHECK-LABEL: test.cv.alu.subuRN.case.b:290; CHECK: # %bb.0:291; CHECK-NEXT: li a2, 32292; CHECK-NEXT: cv.suburnr a0, a1, a2293; CHECK-NEXT: ret294 %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 32)295 ret i32 %1296}297