diff --git a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp index c7675c2f50176..0d2ce26a942e0 100644 --- a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp +++ b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp @@ -70,11 +70,12 @@ XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &TM, setOperationAction(ISD::FP_TO_UINT, MVT::i32, Expand); setOperationAction(ISD::FP_TO_SINT, MVT::i32, Expand); - // No sign extend instructions for i1 + // No sign extend instructions for i1 and sign extend load i8 for (MVT VT : MVT::integer_valuetypes()) { setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i1, Promote); setLoadExtAction(ISD::ZEXTLOAD, VT, MVT::i1, Promote); setLoadExtAction(ISD::EXTLOAD, VT, MVT::i1, Promote); + setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i8, Expand); } setOperationAction(ISD::ConstantPool, PtrVT, Custom); diff --git a/llvm/test/CodeGen/Xtensa/load.ll b/llvm/test/CodeGen/Xtensa/load.ll new file mode 100644 index 0000000000000..2f730f56eb1f5 --- /dev/null +++ b/llvm/test/CodeGen/Xtensa/load.ll @@ -0,0 +1,12 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc --mtriple=xtensa < %s | FileCheck %s + +define signext i8 @test_load_i8(ptr %p){ +; CHECK-LABEL: test_load_i8: +; CHECK: l8ui a8, a2, 0 +; CHECK-NEXT: slli a8, a8, 24 +; CHECK-NEXT: srai a2, a8, 24 +; CHECK-NEXT: ret + %1 = load i8, ptr %p, align 1 + ret i8 %1 +}