From b48b027d05eb28a868ffda436c4409b6b606a0cc Mon Sep 17 00:00:00 2001 From: Shiva Chen Date: Thu, 12 Apr 2018 11:30:59 +0000 Subject: [PATCH] [RISCV] Change function alignment to 4 bytes, and 2 bytes for RVC Summary: According RISC-V ELF psABI specification, base RV32 and RV64 ISAs only allow 32-bit instruction alignment, but instruction allow to be aligned to 16-bit boundaries for C-extension. So we just align to 4 bytes and 2 bytes for C-extension is enough. Reviewers: asb, apazos Differential Revision: https://reviews.llvm.org/D45560 Patch by Kito Cheng. llvm-svn: 329899 --- llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 5 +++-- llvm/test/CodeGen/RISCV/align.ll | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 llvm/test/CodeGen/RISCV/align.ll diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 8e9ab54bf009..0018a9c750f9 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -142,8 +142,9 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, setBooleanContents(ZeroOrOneBooleanContent); // Function alignments (log2). - setMinFunctionAlignment(3); - setPrefFunctionAlignment(3); + unsigned FunctionAlignment = Subtarget.hasStdExtC() ? 1 : 2; + setMinFunctionAlignment(FunctionAlignment); + setPrefFunctionAlignment(FunctionAlignment); // Effectively disable jump table generation. setMinimumJumpTableEntries(INT_MAX); diff --git a/llvm/test/CodeGen/RISCV/align.ll b/llvm/test/CodeGen/RISCV/align.ll new file mode 100644 index 000000000000..f044f3bb156a --- /dev/null +++ b/llvm/test/CodeGen/RISCV/align.ll @@ -0,0 +1,13 @@ +; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ +; RUN: | FileCheck %s -check-prefix=RV32I +; RUN: llc -mtriple=riscv32 -mattr=+c -verify-machineinstrs < %s \ +; RUN: | FileCheck %s -check-prefix=RV32C + +define void @foo() { +;RV32I: .p2align 2 +;RV32I: foo: +;RV32C: .p2align 1 +;RV32C: foo: +entry: + ret void +}