68 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \3; RUN: | FileCheck -check-prefix=RV32I %s4 5define i1 @sadd(i32 %a, i32 %b, ptr %c) nounwind {6; RV32I-LABEL: sadd:7; RV32I: # %bb.0: # %entry8; RV32I-NEXT: add a3, a0, a19; RV32I-NEXT: slt a0, a3, a010; RV32I-NEXT: srli a1, a1, 3111; RV32I-NEXT: xor a0, a1, a012; RV32I-NEXT: sw a3, 0(a2)13; RV32I-NEXT: ret14entry:15 %x = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)16 %calc = extractvalue {i32, i1} %x, 017 %ovf = extractvalue {i32, i1} %x, 118 store i32 %calc, ptr %c19 ret i1 %ovf20}21 22define i1 @ssub(i32 %a, i32 %b, ptr %c) nounwind {23; RV32I-LABEL: ssub:24; RV32I: # %bb.0: # %entry25; RV32I-NEXT: sgtz a3, a126; RV32I-NEXT: sub a1, a0, a127; RV32I-NEXT: slt a0, a1, a028; RV32I-NEXT: xor a0, a3, a029; RV32I-NEXT: sw a1, 0(a2)30; RV32I-NEXT: ret31entry:32 %x = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)33 %calc = extractvalue {i32, i1} %x, 034 %ovf = extractvalue {i32, i1} %x, 135 store i32 %calc, ptr %c36 ret i1 %ovf37}38 39define i1 @uadd(i32 %a, i32 %b, ptr %c) nounwind {40; RV32I-LABEL: uadd:41; RV32I: # %bb.0: # %entry42; RV32I-NEXT: add a1, a0, a143; RV32I-NEXT: sltu a0, a1, a044; RV32I-NEXT: sw a1, 0(a2)45; RV32I-NEXT: ret46entry:47 %x = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)48 %calc = extractvalue {i32, i1} %x, 049 %ovf = extractvalue {i32, i1} %x, 150 store i32 %calc, ptr %c51 ret i1 %ovf52}53 54define i1 @usub(i32 %a, i32 %b, ptr %c) nounwind {55; RV32I-LABEL: usub:56; RV32I: # %bb.0: # %entry57; RV32I-NEXT: sub a1, a0, a158; RV32I-NEXT: sltu a0, a0, a159; RV32I-NEXT: sw a1, 0(a2)60; RV32I-NEXT: ret61entry:62 %x = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)63 %calc = extractvalue {i32, i1} %x, 064 %ovf = extractvalue {i32, i1} %x, 165 store i32 %calc, ptr %c66 ret i1 %ovf67}68