OSDN Git Service

Ensure that the sub-vector load destination is a register.
authorNicolas Capens <capn@google.com>
Wed, 30 Nov 2016 15:39:01 +0000 (10:39 -0500)
committerNicolas Capens <nicolascapens@google.com>
Wed, 30 Nov 2016 17:03:42 +0000 (17:03 +0000)
BUG=swiftshader:15

Change-Id: I7e10342fa1ef9bce22bc8c445240fc34a68e8f47
Reviewed-on: https://chromium-review.googlesource.com/414992
Reviewed-by: Jim Stichnoth <stichnot@chromium.org>
src/IceTargetLoweringX86BaseImpl.h

index 0ba7bce..796aa13 100644 (file)
@@ -4397,17 +4397,19 @@ void TargetX86Base<TraitsType>::lowerIntrinsicCall(
       return;
     }
 
+    auto *T = makeReg(Ty);
     switch (SubVectorSize->getValue()) {
     case 4:
-      _movd(Dest, Src);
+      _movd(T, Src);
       break;
     case 8:
-      _movq(Dest, Src);
+      _movq(T, Src);
       break;
     default:
       Func->setError("Unexpected size for LoadSubVector");
       return;
     }
+    _movp(Dest, T);
     return;
   }
   case Intrinsics::StoreSubVector: {