Added disable-handle-pseudo-memory-ops option.
This commit is contained in:
1
ispc.cpp
1
ispc.cpp
@@ -284,6 +284,7 @@ Opt::Opt() {
|
|||||||
fastMaskedVload = false;
|
fastMaskedVload = false;
|
||||||
unrollLoops = true;
|
unrollLoops = true;
|
||||||
disableAsserts = false;
|
disableAsserts = false;
|
||||||
|
disableHandlePseudoMemoryOps = false;
|
||||||
disableBlendedMaskedStores = false;
|
disableBlendedMaskedStores = false;
|
||||||
disableCoherentControlFlow = false;
|
disableCoherentControlFlow = false;
|
||||||
disableUniformControlFlow = false;
|
disableUniformControlFlow = false;
|
||||||
|
|||||||
6
ispc.h
6
ispc.h
@@ -228,6 +228,12 @@ struct Opt {
|
|||||||
performance in the generated code). */
|
performance in the generated code). */
|
||||||
bool disableAsserts;
|
bool disableAsserts;
|
||||||
|
|
||||||
|
/** If enabled, the various __pseudo* memory ops (gather/scatter,
|
||||||
|
masked load/store) are left in their __pseudo* form, for better
|
||||||
|
understanding of the structure of generated code when reading
|
||||||
|
it. */
|
||||||
|
bool disableHandlePseudoMemoryOps;
|
||||||
|
|
||||||
/** On targets that don't have a masked store instruction but do have a
|
/** On targets that don't have a masked store instruction but do have a
|
||||||
blending instruction, by default, we simulate masked stores by
|
blending instruction, by default, we simulate masked stores by
|
||||||
loading the old value, blending, and storing the result. This can
|
loading the old value, blending, and storing the result. This can
|
||||||
|
|||||||
3
main.cpp
3
main.cpp
@@ -88,6 +88,7 @@ static void usage(int ret) {
|
|||||||
printf(" fast-masked-vload\t\tFaster masked vector loads on SSE (may go past end of array)\n");
|
printf(" fast-masked-vload\t\tFaster masked vector loads on SSE (may go past end of array)\n");
|
||||||
printf(" fast-math\t\t\tPerform non-IEEE-compliant optimizations of numeric expressions\n");
|
printf(" fast-math\t\t\tPerform non-IEEE-compliant optimizations of numeric expressions\n");
|
||||||
#if 0
|
#if 0
|
||||||
|
printf(" disable-handle-pseudo-memory-ops\n");
|
||||||
printf(" disable-blended-masked-stores\t\tScalarize masked stores on SSE (vs. using vblendps)\n");
|
printf(" disable-blended-masked-stores\t\tScalarize masked stores on SSE (vs. using vblendps)\n");
|
||||||
printf(" disable-coherent-control-flow\t\tDisable coherent control flow optimizations\n");
|
printf(" disable-coherent-control-flow\t\tDisable coherent control flow optimizations\n");
|
||||||
printf(" disable-uniform-control-flow\t\tDisable uniform control flow optimizations\n");
|
printf(" disable-uniform-control-flow\t\tDisable uniform control flow optimizations\n");
|
||||||
@@ -254,6 +255,8 @@ int main(int Argc, char *Argv[]) {
|
|||||||
|
|
||||||
// These are only used for performance tests of specific
|
// These are only used for performance tests of specific
|
||||||
// optimizations
|
// optimizations
|
||||||
|
else if (!strcmp(opt, "disable-handle-pseudo-memory-ops"))
|
||||||
|
g->opt.disableHandlePseudoMemoryOps = true;
|
||||||
else if (!strcmp(opt, "disable-blended-masked-stores"))
|
else if (!strcmp(opt, "disable-blended-masked-stores"))
|
||||||
g->opt.disableBlendedMaskedStores = true;
|
g->opt.disableBlendedMaskedStores = true;
|
||||||
else if (!strcmp(opt, "disable-coherent-control-flow"))
|
else if (!strcmp(opt, "disable-coherent-control-flow"))
|
||||||
|
|||||||
4
opt.cpp
4
opt.cpp
@@ -201,8 +201,10 @@ Optimize(llvm::Module *module, int optLevel) {
|
|||||||
// them into something that can actually execute.
|
// them into something that can actually execute.
|
||||||
optPM.add(llvm::createPromoteMemoryToRegisterPass());
|
optPM.add(llvm::createPromoteMemoryToRegisterPass());
|
||||||
optPM.add(CreateGatherScatterFlattenPass());
|
optPM.add(CreateGatherScatterFlattenPass());
|
||||||
|
if (g->opt.disableHandlePseudoMemoryOps == false) {
|
||||||
optPM.add(CreateLowerGatherScatterPass());
|
optPM.add(CreateLowerGatherScatterPass());
|
||||||
optPM.add(CreateLowerMaskedStorePass());
|
optPM.add(CreateLowerMaskedStorePass());
|
||||||
|
}
|
||||||
optPM.add(CreateIsCompileTimeConstantPass(true));
|
optPM.add(CreateIsCompileTimeConstantPass(true));
|
||||||
optPM.add(llvm::createFunctionInliningPass());
|
optPM.add(llvm::createFunctionInliningPass());
|
||||||
optPM.add(CreateMakeInternalFuncsStaticPass());
|
optPM.add(CreateMakeInternalFuncsStaticPass());
|
||||||
@@ -282,8 +284,10 @@ Optimize(llvm::Module *module, int optLevel) {
|
|||||||
optPM.add(CreateLowerMaskedStorePass());
|
optPM.add(CreateLowerMaskedStorePass());
|
||||||
if (!g->opt.disableGatherScatterOptimizations)
|
if (!g->opt.disableGatherScatterOptimizations)
|
||||||
optPM.add(CreateGatherScatterImprovementsPass());
|
optPM.add(CreateGatherScatterImprovementsPass());
|
||||||
|
if (g->opt.disableHandlePseudoMemoryOps == false) {
|
||||||
optPM.add(CreateLowerMaskedStorePass());
|
optPM.add(CreateLowerMaskedStorePass());
|
||||||
optPM.add(CreateLowerGatherScatterPass());
|
optPM.add(CreateLowerGatherScatterPass());
|
||||||
|
}
|
||||||
optPM.add(llvm::createFunctionInliningPass());
|
optPM.add(llvm::createFunctionInliningPass());
|
||||||
optPM.add(llvm::createConstantPropagationPass());
|
optPM.add(llvm::createConstantPropagationPass());
|
||||||
optPM.add(CreateIntrinsicsOptPass());
|
optPM.add(CreateIntrinsicsOptPass());
|
||||||
|
|||||||
Reference in New Issue
Block a user