convertToSignExtendedInteger should return opInvalidOp instead of asserting if semati...
authorEvan Cheng <evan.cheng@apple.com>
Tue, 25 Nov 2008 19:00:29 +0000 (19:00 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 25 Nov 2008 19:00:29 +0000 (19:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60042 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/APFloat.cpp
test/Transforms/IndVarsSimplify/2008-11-25-APFloatAssert.ll [new file with mode: 0644]

index a65e55afb56d4a50eadbcc199e4efd3d5018d7e5..128fee4f01fe8fa2ba3d463684a6e62b15619c26 100644 (file)
@@ -117,6 +117,11 @@ namespace {
            && "Compile-time arithmetic does not support these semantics");
   }
 
+  static inline bool
+  isArithmeticOk(const llvm::fltSemantics &semantics) {
+    return semantics.arithmeticOK;
+  }
+
   /* Return the value of a decimal exponent of the form
      [+-]ddddddd.
 
@@ -1787,7 +1792,8 @@ APFloat::convertToSignExtendedInteger(integerPart *parts, unsigned int width,
   const integerPart *src;
   unsigned int dstPartsCount, truncatedBits;
 
-  assertArithmeticOK(*semantics);
+  if (!isArithmeticOk(*semantics))
+    return opInvalidOp;
 
   *isExact = false;
 
diff --git a/test/Transforms/IndVarsSimplify/2008-11-25-APFloatAssert.ll b/test/Transforms/IndVarsSimplify/2008-11-25-APFloatAssert.ll
new file mode 100644 (file)
index 0000000..9fd0eb9
--- /dev/null
@@ -0,0 +1,11 @@
+; RUN: llvm-as < %s | opt -indvars
+
+define void @t() nounwind {
+entry:
+       br label %bb23.i91
+
+bb23.i91:              ; preds = %bb23.i91, %entry
+       %result.0.i89 = phi ppc_fp128 [ 0xM00000000000000000000000000000000, %entry ], [ %0, %bb23.i91 ]                ; <ppc_fp128> [#uses=2]
+       %0 = mul ppc_fp128 %result.0.i89, %result.0.i89         ; <ppc_fp128> [#uses=1]
+       br label %bb23.i91
+}