[llvm] 22c66c1 - [JumpThreading] add a miscompile test based on discussion in D76332; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 18 13:50:49 PDT 2020


Author: Sanjay Patel
Date: 2020-03-18T16:46:18-04:00
New Revision: 22c66c1a28c042c51ee7059b954eff5db589ca92

URL: https://github.com/llvm/llvm-project/commit/22c66c1a28c042c51ee7059b954eff5db589ca92
DIFF: https://github.com/llvm/llvm-project/commit/22c66c1a28c042c51ee7059b954eff5db589ca92.diff

LOG: [JumpThreading] add a miscompile test based on discussion in D76332; NFC

Added: 
    

Modified: 
    llvm/test/Transforms/JumpThreading/select.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/JumpThreading/select.ll b/llvm/test/Transforms/JumpThreading/select.ll
index 08598f84c1fd..4309a1babd73 100644
--- a/llvm/test/Transforms/JumpThreading/select.ll
+++ b/llvm/test/Transforms/JumpThreading/select.ll
@@ -441,3 +441,31 @@ sw.default:                                       ; preds = %if.end, %sw.bb9
 ; CHECK: i32 2, label [[DEST1]]
 ; CHECK: i32 4, label [[DEST2]]
 }
+
+; FIXME: This is an invalid transform. If %b is false and %x is poison,
+; then the select produces poison (the result of the program is poison).
+; But with this transform, we may be branching on poison, and that is UB.
+
+define i32 @TryToUnfoldSelectInCurrBB(i1 %b, i1 %ui, i32 %s, i1 %x) {
+; CHECK-LABEL: @TryToUnfoldSelectInCurrBB(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br i1 [[B:%.*]], label [[IF_END_THREAD:%.*]], label [[IF_END:%.*]]
+; CHECK:       if.end:
+; CHECK-NEXT:    br i1 [[X:%.*]], label [[TMP0:%.*]], label [[IF_END_THREAD]]
+; CHECK:       0:
+; CHECK-NEXT:    br label [[IF_END_THREAD]]
+; CHECK:       if.end.thread:
+; CHECK-NEXT:    [[TMP1:%.*]] = phi i32 [ [[S:%.*]], [[TMP0]] ], [ 42, [[IF_END]] ], [ 42, [[ENTRY:%.*]] ]
+; CHECK-NEXT:    ret i32 [[TMP1]]
+;
+entry:
+  br i1 %b, label %if.end, label %if.else
+
+if.else:
+  br label %if.end
+
+if.end:
+  %v = phi i1 [ %x, %if.else ], [ false, %entry ]
+  %v1 = select i1 %v, i32 %s, i32 42
+  ret i32 %v1
+}


        


More information about the llvm-commits mailing list