summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-08 13:48:06 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-08 13:48:06 +0000
commitbd791b57f8d76fa99048d8d605b7b749bb8c83fc (patch)
treee3185f5febd7f1f03a907f108157474e0d5bb2c1 /llvm/lib
parent214f67ece54f193f0b561c71e12092255b2edb5c (diff)
downloadbcm5719-llvm-bd791b57f8d76fa99048d8d605b7b749bb8c83fc.tar.gz
bcm5719-llvm-bd791b57f8d76fa99048d8d605b7b749bb8c83fc.zip
GlobalISel: widenScalar for G_BUILD_VECTOR
llvm-svn: 365320
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 8e26b8a120e..f44cdefe309 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -1398,6 +1398,25 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
widenScalarDst(MI, WideTy, 0);
Observer.changedInstr(MI);
return Legalized;
+ case TargetOpcode::G_BUILD_VECTOR: {
+ Observer.changingInstr(MI);
+
+ const LLT WideEltTy = TypeIdx == 1 ? WideTy : WideTy.getElementType();
+ for (int I = 1, E = MI.getNumOperands(); I != E; ++I)
+ widenScalarSrc(MI, WideEltTy, I, TargetOpcode::G_ANYEXT);
+
+ // Avoid changing the result vector type if the source element type was
+ // requested.
+ if (TypeIdx == 1) {
+ auto &TII = *MI.getMF()->getSubtarget().getInstrInfo();
+ MI.setDesc(TII.get(TargetOpcode::G_BUILD_VECTOR_TRUNC));
+ } else {
+ widenScalarDst(MI, WideTy, 0);
+ }
+
+ Observer.changedInstr(MI);
+ return Legalized;
+ }
}
}
OpenPOWER on IntegriCloud