浏览代码

Merged PR 76: Produce correct HL matrix store in EmitExtMatrixElementExpr

Produce correct HL matrix store in EmitExtMatrixElementExpr
Tex Riddell 7 年之前
父节点
当前提交
d4cadd8a75
共有 2 个文件被更改,包括 9 次插入1 次删除
  1. 1 1
      tools/clang/lib/CodeGen/CGExpr.cpp
  2. 8 0
      tools/clang/test/CodeGenHLSL/quick-test/matrix_return_sub.hlsl

+ 1 - 1
tools/clang/lib/CodeGen/CGExpr.cpp

@@ -2847,7 +2847,7 @@ CodeGenFunction::EmitExtMatrixElementExpr(const ExtMatrixElementExpr *E) {
 
 
     // Store the vector to memory (because LValue wants an address).
     // Store the vector to memory (because LValue wants an address).
     llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
     llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
-    Builder.CreateStore(Vec, VecMem);
+    CGM.getHLSLRuntime().EmitHLSLMatrixStore(*this, Vec, VecMem, E->getBase()->getType());
     Base = MakeAddrLValue(VecMem, E->getBase()->getType());
     Base = MakeAddrLValue(VecMem, E->getBase()->getType());
   }
   }
   
   

+ 8 - 0
tools/clang/test/CodeGenHLSL/quick-test/matrix_return_sub.hlsl

@@ -0,0 +1,8 @@
+// RUN: %dxc -T lib_6_3 %s | FileCheck %s
+
+// Make sure this works on intrinsic that returns matrix
+// CHECK: call float @dx.op.worldToObject.f32(i32 152, i32 0, i8 1)
+
+float foo() {
+  return WorldToObject()._m01;
+}