craig.topper created this revision.
craig.topper added reviewers: andreadb, RKSimon, spatel.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
craig.topper requested review of this revision.
My experimental patch for PR48033 so I can share it in the bug.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90544

Files:
  clang/lib/CodeGen/CGBuiltin.cpp


Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -11895,16 +11895,28 @@
   case X86::BI_mm_setcsr:
   case X86::BI__builtin_ia32_ldmxcsr: {
     Address Tmp = CreateMemTemp(E->getArg(0)->getType());
+    llvm::Value *TmpPtr = Tmp.getPointer();
+    llvm::Value *TmpSize = EmitLifetimeStart(
+        CGM.getDataLayout().getTypeAllocSize(Tmp.getElementType()), TmpPtr);
     Builder.CreateStore(Ops[0], Tmp);
-    return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
-                          Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy));
+    Value *Call = 
Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
+                                     Builder.CreateBitCast(Tmp.getPointer(), 
Int8PtrTy));
+    if (TmpSize)
+      EmitLifetimeEnd(TmpSize, TmpPtr);
+    return Call;
   }
   case X86::BI_mm_getcsr:
   case X86::BI__builtin_ia32_stmxcsr: {
     Address Tmp = CreateMemTemp(E->getType());
+    llvm::Value *TmpPtr = Tmp.getPointer();
+    llvm::Value *TmpSize = EmitLifetimeStart(
+        CGM.getDataLayout().getTypeAllocSize(Tmp.getElementType()), TmpPtr);
     Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr),
                        Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy));
-    return Builder.CreateLoad(Tmp, "stmxcsr");
+    Value *Call = Builder.CreateLoad(Tmp, "stmxcsr");
+    if (TmpSize)
+      EmitLifetimeEnd(TmpSize, TmpPtr);
+    return Call;
   }
   case X86::BI__builtin_ia32_xsave:
   case X86::BI__builtin_ia32_xsave64:


Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -11895,16 +11895,28 @@
   case X86::BI_mm_setcsr:
   case X86::BI__builtin_ia32_ldmxcsr: {
     Address Tmp = CreateMemTemp(E->getArg(0)->getType());
+    llvm::Value *TmpPtr = Tmp.getPointer();
+    llvm::Value *TmpSize = EmitLifetimeStart(
+        CGM.getDataLayout().getTypeAllocSize(Tmp.getElementType()), TmpPtr);
     Builder.CreateStore(Ops[0], Tmp);
-    return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
-                          Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy));
+    Value *Call = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
+                                     Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy));
+    if (TmpSize)
+      EmitLifetimeEnd(TmpSize, TmpPtr);
+    return Call;
   }
   case X86::BI_mm_getcsr:
   case X86::BI__builtin_ia32_stmxcsr: {
     Address Tmp = CreateMemTemp(E->getType());
+    llvm::Value *TmpPtr = Tmp.getPointer();
+    llvm::Value *TmpSize = EmitLifetimeStart(
+        CGM.getDataLayout().getTypeAllocSize(Tmp.getElementType()), TmpPtr);
     Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr),
                        Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy));
-    return Builder.CreateLoad(Tmp, "stmxcsr");
+    Value *Call = Builder.CreateLoad(Tmp, "stmxcsr");
+    if (TmpSize)
+      EmitLifetimeEnd(TmpSize, TmpPtr);
+    return Call;
   }
   case X86::BI__builtin_ia32_xsave:
   case X86::BI__builtin_ia32_xsave64:
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to