forked from GPUOpen-Drivers/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merged master:82f6ae5433c into amd-gfx:f07e6001b81
Local branch amd-gfx f07e600 Merged master:cd04e8349bd into amd-gfx:12ed18ff8c4 Remote branch master 82f6ae5 [clang-change-namespace] Change file pattern to be an anchored regex
- Loading branch information
Showing
23 changed files
with
800 additions
and
171 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
clang/lib/Tooling/ExpandResponseFilesCompilationDatabase.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
//===- ExpandResponseFileCompilationDataBase.cpp --------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "clang/Tooling/CompilationDatabase.h" | ||
#include "llvm/ADT/StringRef.h" | ||
#include "llvm/ADT/Triple.h" | ||
#include "llvm/Support/CommandLine.h" | ||
#include "llvm/Support/ConvertUTF.h" | ||
#include "llvm/Support/ErrorOr.h" | ||
#include "llvm/Support/MemoryBuffer.h" | ||
#include "llvm/Support/Path.h" | ||
#include "llvm/Support/StringSaver.h" | ||
|
||
namespace clang { | ||
namespace tooling { | ||
namespace { | ||
|
||
class ExpandResponseFilesDatabase : public CompilationDatabase { | ||
public: | ||
ExpandResponseFilesDatabase( | ||
std::unique_ptr<CompilationDatabase> Base, | ||
llvm::cl::TokenizerCallback Tokenizer, | ||
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS) | ||
: Base(std::move(Base)), Tokenizer(Tokenizer), FS(std::move(FS)) { | ||
assert(this->Base != nullptr); | ||
assert(this->Tokenizer != nullptr); | ||
assert(this->FS != nullptr); | ||
} | ||
|
||
std::vector<std::string> getAllFiles() const override { | ||
return Base->getAllFiles(); | ||
} | ||
|
||
std::vector<CompileCommand> | ||
getCompileCommands(StringRef FilePath) const override { | ||
return expand(Base->getCompileCommands(FilePath)); | ||
} | ||
|
||
std::vector<CompileCommand> getAllCompileCommands() const override { | ||
return expand(Base->getAllCompileCommands()); | ||
} | ||
|
||
private: | ||
std::vector<CompileCommand> expand(std::vector<CompileCommand> Cmds) const { | ||
for (auto &Cmd : Cmds) { | ||
bool SeenRSPFile = false; | ||
llvm::SmallVector<const char *, 20> Argv; | ||
Argv.reserve(Cmd.CommandLine.size()); | ||
for (auto &Arg : Cmd.CommandLine) { | ||
Argv.push_back(Arg.c_str()); | ||
SeenRSPFile |= Arg.front() == '@'; | ||
} | ||
if (!SeenRSPFile) | ||
continue; | ||
llvm::BumpPtrAllocator Alloc; | ||
llvm::StringSaver Saver(Alloc); | ||
llvm::cl::ExpandResponseFiles(Saver, Tokenizer, Argv, false, false, *FS, | ||
llvm::StringRef(Cmd.Directory)); | ||
Cmd.CommandLine.assign(Argv.begin(), Argv.end()); | ||
} | ||
return Cmds; | ||
} | ||
|
||
private: | ||
std::unique_ptr<CompilationDatabase> Base; | ||
llvm::cl::TokenizerCallback Tokenizer; | ||
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS; | ||
}; | ||
|
||
} // namespace | ||
|
||
std::unique_ptr<CompilationDatabase> | ||
expandResponseFiles(std::unique_ptr<CompilationDatabase> Base, | ||
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS) { | ||
auto Tokenizer = llvm::Triple(llvm::sys::getProcessTriple()).isOSWindows() | ||
? llvm::cl::TokenizeWindowsCommandLine | ||
: llvm::cl::TokenizeGNUCommandLine; | ||
return std::make_unique<ExpandResponseFilesDatabase>( | ||
std::move(Base), Tokenizer, std::move(FS)); | ||
} | ||
|
||
} // namespace tooling | ||
} // namespace clang |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py | ||
// RUN: %clang_cc1 -triple thumbv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -S -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s | ||
// RUN: %clang_cc1 -triple thumbv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -fallow-half-arguments-and-returns -O0 -disable-O0-optnone -DPOLYMORPHIC -S -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s | ||
|
||
#include <arm_mve.h> | ||
|
||
// CHECK-LABEL: @test_vmulhq_u8( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vmulh.v16i8(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]]) | ||
// CHECK-NEXT: ret <16 x i8> [[TMP0]] | ||
// | ||
uint8x16_t test_vmulhq_u8(uint8x16_t a, uint8x16_t b) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq(a, b); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_u8(a, b); | ||
#endif /* POLYMORPHIC */ | ||
} | ||
|
||
// CHECK-LABEL: @test_vmulhq_s16( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vmulh.v8i16(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]]) | ||
// CHECK-NEXT: ret <8 x i16> [[TMP0]] | ||
// | ||
int16x8_t test_vmulhq_s16(int16x8_t a, int16x8_t b) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq(a, b); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_s16(a, b); | ||
#endif /* POLYMORPHIC */ | ||
} | ||
|
||
// CHECK-LABEL: @test_vmulhq_u32( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vmulh.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) | ||
// CHECK-NEXT: ret <4 x i32> [[TMP0]] | ||
// | ||
uint32x4_t test_vmulhq_u32(uint32x4_t a, uint32x4_t b) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq(a, b); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_u32(a, b); | ||
#endif /* POLYMORPHIC */ | ||
} | ||
|
||
// CHECK-LABEL: @test_vmulhq_m_s8( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32 | ||
// CHECK-NEXT: [[TMP1:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[TMP0]]) | ||
// CHECK-NEXT: [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.mulh.predicated.v16i8.v16i1(<16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i1> [[TMP1]], <16 x i8> [[INACTIVE:%.*]]) | ||
// CHECK-NEXT: ret <16 x i8> [[TMP2]] | ||
// | ||
int8x16_t test_vmulhq_m_s8(int8x16_t inactive, int8x16_t a, int8x16_t b, mve_pred16_t p) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq_m(inactive, a, b, p); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_m_s8(inactive, a, b, p); | ||
#endif /* POLYMORPHIC */ | ||
} | ||
|
||
// CHECK-LABEL: @test_vmulhq_m_u16( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32 | ||
// CHECK-NEXT: [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]]) | ||
// CHECK-NEXT: [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.mulh.predicated.v8i16.v8i1(<8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i1> [[TMP1]], <8 x i16> [[INACTIVE:%.*]]) | ||
// CHECK-NEXT: ret <8 x i16> [[TMP2]] | ||
// | ||
uint16x8_t test_vmulhq_m_u16(uint16x8_t inactive, uint16x8_t a, uint16x8_t b, mve_pred16_t p) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq_m(inactive, a, b, p); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_m_u16(inactive, a, b, p); | ||
#endif /* POLYMORPHIC */ | ||
} | ||
|
||
// CHECK-LABEL: @test_vmulhq_m_s32( | ||
// CHECK-NEXT: entry: | ||
// CHECK-NEXT: [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32 | ||
// CHECK-NEXT: [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]]) | ||
// CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.arm.mve.mulh.predicated.v4i32.v4i1(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i1> [[TMP1]], <4 x i32> [[INACTIVE:%.*]]) | ||
// CHECK-NEXT: ret <4 x i32> [[TMP2]] | ||
// | ||
int32x4_t test_vmulhq_m_s32(int32x4_t inactive, int32x4_t a, int32x4_t b, mve_pred16_t p) | ||
{ | ||
#ifdef POLYMORPHIC | ||
return vmulhq_m(inactive, a, b, p); | ||
#else /* POLYMORPHIC */ | ||
return vmulhq_m_s32(inactive, a, b, p); | ||
#endif /* POLYMORPHIC */ | ||
} |
Oops, something went wrong.