Skip to content

Commit 1d6313d

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:9940620f6eab50deeaed0d976b2ea0afd007ba24 into amd-gfx:7a792ea49b6b
Local branch amd-gfx 7a792ea Merged main:7b977e0f644c43232732e149b03d41de321d804e into amd-gfx:663bb9b5575a Remote branch main 9940620 [GISel][RISCV] Legalize G_CONSTANT_FOLD_BARRIER (llvm#89960)
2 parents 7a792ea + 9940620 commit 1d6313d

File tree

16 files changed

+316
-3
lines changed

16 files changed

+316
-3
lines changed

compiler-rt/cmake/config-ix.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ check_cxx_compiler_flag("-Werror -Wframe-larger-than=512" COMPILER_RT_HAS_WFRAME
127127
check_cxx_compiler_flag("-Werror -Wglobal-constructors" COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG)
128128
check_cxx_compiler_flag("-Werror -Wc99-extensions" COMPILER_RT_HAS_WC99_EXTENSIONS_FLAG)
129129
check_cxx_compiler_flag("-Werror -Wgnu" COMPILER_RT_HAS_WGNU_FLAG)
130+
check_cxx_compiler_flag("-Werror -Wgnu-anonymous-struct" COMPILER_RT_HAS_WGNU_ANONYMOUS_STRUCT_FLAG)
130131
check_cxx_compiler_flag("-Werror -Wvariadic-macros" COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG)
131132
check_cxx_compiler_flag("-Werror -Wunused-parameter" COMPILER_RT_HAS_WUNUSED_PARAMETER_FLAG)
132133
check_cxx_compiler_flag("-Werror -Wcovered-switch-default" COMPILER_RT_HAS_WCOVERED_SWITCH_DEFAULT_FLAG)

compiler-rt/lib/ctx_profile/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ include_directories(../../include)
1515
# We don't use the C++ Standard Library here, so avoid including it by mistake.
1616
append_list_if(COMPILER_RT_HAS_NOSTDINCXX_FLAG -nostdinc++ EXTRA_FLAGS)
1717

18+
# __sanitizer_siginfo
19+
append_list_if(COMPILER_RT_HAS_WGNU_ANONYMOUS_STRUCT_FLAG -Wno-gnu-anonymous-struct EXTRA_FLAGS)
20+
1821
if(COMPILER_RT_INCLUDE_TESTS)
1922
add_subdirectory(tests)
2023
endif()
@@ -26,4 +29,4 @@ add_compiler_rt_runtime(clang_rt.ctx_profile
2629
CFLAGS ${EXTRA_FLAGS}
2730
SOURCES ${CTX_PROFILE_SOURCES}
2831
ADDITIONAL_HEADERS ${CTX_PROFILE_HEADERS}
29-
PARENT_TARGET ctx_profile)
32+
PARENT_TARGET ctx_profile)

llvm/include/llvm/Config/llvm-config.h.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
/* Indicate that this is LLVM compiled from the amd-gfx branch. */
1818
#define LLVM_HAVE_BRANCH_AMD_GFX
19-
#define LLVM_MAIN_REVISION 499114
19+
#define LLVM_MAIN_REVISION 499119
2020

2121
/* Define if LLVM_ENABLE_DUMP is enabled */
2222
#cmakedefine LLVM_ENABLE_DUMP
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//===- lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.cpp ---------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "AMDGPUCodeGenPassBuilder.h"
10+
#include "AMDGPUTargetMachine.h"
11+
12+
using namespace llvm;
13+
14+
AMDGPUCodeGenPassBuilder::AMDGPUCodeGenPassBuilder(
15+
AMDGPUTargetMachine &TM, const CGPassBuilderOption &Opts,
16+
PassInstrumentationCallbacks *PIC)
17+
: CodeGenPassBuilder(TM, Opts, PIC) {
18+
Opt.RequiresCodeGenSCCOrder = true;
19+
// Exceptions and StackMaps are not supported, so these passes will never do
20+
// anything.
21+
// Garbage collection is not supported.
22+
disablePass<StackMapLivenessPass, FuncletLayoutPass,
23+
ShadowStackGCLoweringPass>();
24+
}
25+
26+
void AMDGPUCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
27+
// TODO: Add passes pre instruction selection.
28+
}
29+
30+
void AMDGPUCodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
31+
CreateMCStreamer) const {
32+
// TODO: Add AsmPrinter.
33+
}
34+
35+
Error AMDGPUCodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
36+
// TODO: Add instruction selector.
37+
return Error::success();
38+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//===- lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.h -----------*- C++ -*---===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUCODEGENPASSBUILDER_H
10+
#define LLVM_LIB_TARGET_AMDGPU_AMDGPUCODEGENPASSBUILDER_H
11+
12+
#include "llvm/MC/MCStreamer.h"
13+
#include "llvm/Passes/CodeGenPassBuilder.h"
14+
15+
namespace llvm {
16+
17+
class AMDGPUTargetMachine;
18+
19+
class AMDGPUCodeGenPassBuilder
20+
: public CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, AMDGPUTargetMachine> {
21+
public:
22+
AMDGPUCodeGenPassBuilder(AMDGPUTargetMachine &TM,
23+
const CGPassBuilderOption &Opts,
24+
PassInstrumentationCallbacks *PIC);
25+
26+
void addPreISel(AddIRPass &addPass) const;
27+
void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
28+
Error addInstSelector(AddMachinePass &) const;
29+
};
30+
31+
} // namespace llvm
32+
33+
#endif // LLVM_LIB_TARGET_AMDGPU_AMDGPUCODEGENPASSBUILDER_H

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "AMDGPUTargetMachine.h"
1616
#include "AMDGPU.h"
1717
#include "AMDGPUAliasAnalysis.h"
18+
#include "AMDGPUCodeGenPassBuilder.h"
1819
#include "AMDGPUCtorDtorLowering.h"
1920
#include "AMDGPUExportClustering.h"
2021
#include "AMDGPUIGroupLP.h"
@@ -648,6 +649,14 @@ parseAMDGPUAtomicOptimizerStrategy(StringRef Params) {
648649
return make_error<StringError>("invalid parameter", inconvertibleErrorCode());
649650
}
650651

652+
Error AMDGPUTargetMachine::buildCodeGenPipeline(
653+
ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
654+
CodeGenFileType FileType, const CGPassBuilderOption &Opts,
655+
PassInstrumentationCallbacks *PIC) {
656+
AMDGPUCodeGenPassBuilder CGPB(*this, Opts, PIC);
657+
return CGPB.buildPipeline(MPM, Out, DwoOut, FileType);
658+
}
659+
651660
void AMDGPUTargetMachine::registerPassBuilderCallbacks(
652661
PassBuilder &PB, bool PopulateClassToPassNames) {
653662

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ class AMDGPUTargetMachine : public LLVMTargetMachine {
5252
return TLOF.get();
5353
}
5454

55+
Error buildCodeGenPipeline(ModulePassManager &MPM, raw_pwrite_stream &Out,
56+
raw_pwrite_stream *DwoOut,
57+
CodeGenFileType FileType,
58+
const CGPassBuilderOption &Opts,
59+
PassInstrumentationCallbacks *PIC) override;
60+
5561
void registerPassBuilderCallbacks(PassBuilder &PB,
5662
bool PopulateClassToPassNames) override;
5763
void registerDefaultAliasAnalyses(AAManager &) override;

llvm/lib/Target/AMDGPU/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ add_llvm_target(AMDGPUCodeGen
5050
AMDGPUAtomicOptimizer.cpp
5151
AMDGPUAttributor.cpp
5252
AMDGPUCallLowering.cpp
53+
AMDGPUCodeGenPassBuilder.cpp
5354
AMDGPUCodeGenPrepare.cpp
5455
AMDGPUCombinerHelper.cpp
5556
AMDGPUConditionalDiscard.cpp
@@ -121,6 +122,7 @@ add_llvm_target(AMDGPUCodeGen
121122
GCNVOPDUtils.cpp
122123
R600AsmPrinter.cpp
123124
R600ClauseMergePass.cpp
125+
R600CodeGenPassBuilder.cpp
124126
R600ControlFlowFinalizer.cpp
125127
R600EmitClauseMarkers.cpp
126128
R600ExpandSpecialInstrs.cpp
@@ -185,6 +187,7 @@ add_llvm_target(AMDGPUCodeGen
185187
GlobalISel
186188
HipStdPar
187189
IPO
190+
IRPrinter
188191
MC
189192
MIRParser
190193
Passes
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//===-- R600CodeGenPassBuilder.cpp ------ Build R600 CodeGen pipeline -----===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "R600CodeGenPassBuilder.h"
10+
#include "R600TargetMachine.h"
11+
12+
using namespace llvm;
13+
14+
R600CodeGenPassBuilder::R600CodeGenPassBuilder(
15+
R600TargetMachine &TM, const CGPassBuilderOption &Opts,
16+
PassInstrumentationCallbacks *PIC)
17+
: CodeGenPassBuilder(TM, Opts, PIC) {
18+
Opt.RequiresCodeGenSCCOrder = true;
19+
}
20+
21+
void R600CodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
22+
// TODO: Add passes pre instruction selection.
23+
}
24+
25+
void R600CodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
26+
CreateMCStreamer) const {
27+
// TODO: Add AsmPrinter.
28+
}
29+
30+
Error R600CodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
31+
// TODO: Add instruction selector.
32+
return Error::success();
33+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//===-- R600CodeGenPassBuilder.h -- Build R600 CodeGen pipeline -*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIB_TARGET_AMDGPU_R600CODEGENPASSBUILDER_H
10+
#define LLVM_LIB_TARGET_AMDGPU_R600CODEGENPASSBUILDER_H
11+
12+
#include "llvm/MC/MCStreamer.h"
13+
#include "llvm/Passes/CodeGenPassBuilder.h"
14+
15+
namespace llvm {
16+
17+
class R600TargetMachine;
18+
19+
class R600CodeGenPassBuilder
20+
: public CodeGenPassBuilder<R600CodeGenPassBuilder, R600TargetMachine> {
21+
public:
22+
R600CodeGenPassBuilder(R600TargetMachine &TM, const CGPassBuilderOption &Opts,
23+
PassInstrumentationCallbacks *PIC);
24+
25+
void addPreISel(AddIRPass &addPass) const;
26+
void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
27+
Error addInstSelector(AddMachinePass &) const;
28+
};
29+
30+
} // namespace llvm
31+
32+
#endif // LLVM_LIB_TARGET_AMDGPU_R600CODEGENPASSBUILDER_H

llvm/lib/Target/AMDGPU/R600TargetMachine.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "R600TargetMachine.h"
1616
#include "AMDGPUTargetMachine.h"
1717
#include "R600.h"
18+
#include "R600CodeGenPassBuilder.h"
1819
#include "R600MachineScheduler.h"
1920
#include "R600TargetTransformInfo.h"
2021
#include "llvm/Transforms/Scalar.h"
@@ -144,3 +145,11 @@ void R600PassConfig::addPreEmitPass() {
144145
TargetPassConfig *R600TargetMachine::createPassConfig(PassManagerBase &PM) {
145146
return new R600PassConfig(*this, PM);
146147
}
148+
149+
Error R600TargetMachine::buildCodeGenPipeline(
150+
ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
151+
CodeGenFileType FileType, const CGPassBuilderOption &Opts,
152+
PassInstrumentationCallbacks *PIC) {
153+
R600CodeGenPassBuilder CGPB(*this, Opts, PIC);
154+
return CGPB.buildPipeline(MPM, Out, DwoOut, FileType);
155+
}

llvm/lib/Target/AMDGPU/R600TargetMachine.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class R600TargetMachine final : public AMDGPUTargetMachine {
3838

3939
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
4040

41+
Error buildCodeGenPipeline(ModulePassManager &MPM, raw_pwrite_stream &Out,
42+
raw_pwrite_stream *DwoOut,
43+
CodeGenFileType FileType,
44+
const CGPassBuilderOption &Opt,
45+
PassInstrumentationCallbacks *PIC) override;
46+
4147
const TargetSubtargetInfo *getSubtargetImpl(const Function &) const override;
4248

4349
TargetTransformInfo getTargetTransformInfo(const Function &F) const override;

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
227227
ConstantActions.widenScalarToNextPow2(0).clampScalar(0, s32, sXLen);
228228

229229
// TODO: transform illegal vector types into legal vector type
230-
getActionDefinitionsBuilder(G_IMPLICIT_DEF)
230+
getActionDefinitionsBuilder({G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
231231
.legalFor({s32, sXLen, p0})
232232
.legalIf(typeIsLegalBoolVec(0, BoolVecTys, ST))
233233
.legalIf(typeIsLegalIntOrFPVec(0, IntOrFPVecTys, ST))
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
3+
---
4+
name: constbarrier_i32
5+
body: |
6+
bb.0.entry:
7+
; CHECK-LABEL: name: constbarrier_i32
8+
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
9+
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C]]
10+
; CHECK-NEXT: $x10 = COPY [[CONSTANT_FOLD_BARRIER]](s32)
11+
; CHECK-NEXT: PseudoRET implicit $x10
12+
%1:_(s32) = G_CONSTANT i32 16368
13+
%2:_(s32) = G_CONSTANT_FOLD_BARRIER %1
14+
$x10 = COPY %2(s32)
15+
PseudoRET implicit $x10
16+
17+
...
18+
---
19+
name: constbarrier_nxv2i1
20+
body: |
21+
bb.0.entry:
22+
; CHECK-LABEL: name: constbarrier_nxv2i1
23+
; CHECK: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL $x0
24+
; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMCLR_VL $x0
25+
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER [[VMCLR_VL]]
26+
; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s1>)
27+
; CHECK-NEXT: PseudoRET implicit $v8
28+
%1:_(s1) = G_CONSTANT i1 0
29+
%2:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %1(s1)
30+
%3:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER %2
31+
$v8 = COPY %3(<vscale x 2 x s1>)
32+
PseudoRET implicit $v8
33+
34+
...
35+
---
36+
name: constbarrier_nxv2i32
37+
body: |
38+
bb.0.entry:
39+
; CHECK-LABEL: name: constbarrier_nxv2i32
40+
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
41+
; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s32)
42+
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER [[SPLAT_VECTOR]]
43+
; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s32>)
44+
; CHECK-NEXT: PseudoRET implicit $v8
45+
%1:_(s32) = G_CONSTANT i32 0
46+
%2:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR %1(s32)
47+
%3:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER %2
48+
$v8 = COPY %3(<vscale x 2 x s32>)
49+
PseudoRET implicit $v8
50+
51+
...

0 commit comments

Comments
 (0)