From 6f502d2c33496f7f0426334c2bad2bb062b13b27 Mon Sep 17 00:00:00 2001 From: zhoujing Date: Tue, 25 Jul 2023 16:55:05 +0800 Subject: [PATCH] [VENTUS][RISCV][fix] Set correct datalayout for different language options --- clang/lib/Basic/Targets/RISCV.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp index bd87b66820b3..804377cfad3c 100644 --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -48,9 +48,15 @@ void RISCVTargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) { TargetInfo::adjust(Diags, Opts); llvm::Triple Triple = getTriple(); bool isRV32 = Triple.isRISCV32(); - // Only OpenCL language needs special address mapping - // FIXME: when meeting C code here is not valid !! - if(Opts.OpenCL || Opts.getOpenCLVersionString().size()) { + // Not OpenCL language, we no not need special data layout + if ((Opts.C99 || Opts.C11 || Opts.C17) && !Opts.OpenCL) { + if(isRV32) + resetDataLayout("e-m:e-p:32:32-i64:64-n32-S128"); + else + resetDataLayout("e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"); + } + // Only OpenCL language needs special address mapping + else { UseAddrSpaceMapMangling = true; AddrSpaceMap = &VentusAddrSpaceMap; if(isRV32) @@ -58,14 +64,7 @@ void RISCVTargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) { else resetDataLayout("e-m:e-p:64:64-i64:64-i128:128-n32:64-S128-A5-G1"); } - // Not OpenCL language, we no not need special data layout - // just follow the official way - else { - if(isRV32) - resetDataLayout("e-m:e-p:32:32-i64:64-n32-S128"); - else - resetDataLayout("e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"); - } + } ArrayRef RISCVTargetInfo::getGCCRegNames() const {