Don't zero high 24 bit of %mxcsr by emitting 32 bit load instead of 8 bit one.
llvm-svn: 42618
diff --git a/llvm-gcc-4.0/gcc/config/i386/llvm-i386.cpp b/llvm-gcc-4.0/gcc/config/i386/llvm-i386.cpp
index 57e2b31..94e90c3 100644
--- a/llvm-gcc-4.0/gcc/config/i386/llvm-i386.cpp
+++ b/llvm-gcc-4.0/gcc/config/i386/llvm-i386.cpp
@@ -610,9 +610,11 @@
case IX86_BUILTIN_STMXCSR: {
Function *stmxcsr =
Intrinsic::getDeclaration(TheModule, Intrinsic::x86_sse_stmxcsr);
- Value *Ptr = CreateTemporary(Type::Int32Ty);
- Ptr = Builder.CreateBitCast(Ptr, PointerType::get(Type::Int8Ty), "tmp");
- Builder.CreateCall(stmxcsr, Ptr);
+ Value *Ptr = CreateTemporary(Type::Int32Ty);
+ Value *BPtr = Builder.CreateBitCast(Ptr, PointerType::get(Type::Int8Ty),
+ "tmp");
+ Builder.CreateCall(stmxcsr, BPtr);
+
Result = Builder.CreateLoad(Ptr, "tmp");
return true;
}