[llvm] dbe4bb7 - [PhaseOrdering] add test to show missing folds from PR56119; NFC
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 30 12:51:50 PDT 2022
Author: Sanjay Patel
Date: 2022-06-30T15:51:39-04:00
New Revision: dbe4bb7d12dced75aa54e7942410bed7a8b923ef
URL: https://github.com/llvm/llvm-project/commit/dbe4bb7d12dced75aa54e7942410bed7a8b923ef
DIFF: https://github.com/llvm/llvm-project/commit/dbe4bb7d12dced75aa54e7942410bed7a8b923ef.diff
LOG: [PhaseOrdering] add test to show missing folds from PR56119; NFC
issue #56119
Added:
Modified:
llvm/test/Transforms/PhaseOrdering/cmp-logic.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/PhaseOrdering/cmp-logic.ll b/llvm/test/Transforms/PhaseOrdering/cmp-logic.ll
index c9532408a2f93..ee64afddbfdf3 100644
--- a/llvm/test/Transforms/PhaseOrdering/cmp-logic.ll
+++ b/llvm/test/Transforms/PhaseOrdering/cmp-logic.ll
@@ -1,5 +1,10 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -passes='default<O1>' -S < %s | FileCheck %s
+; RUN: opt -passes='default<O1>' -S < %s | FileCheck %s --check-prefixes=CHECK,O1
+; RUN: opt -passes='default<Oz>' -S < %s | FileCheck %s --check-prefixes=CHECK,OZ
+
+target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+
+%struct.a = type { i32 }
define i32 @PR38781(i32 noundef %a, i32 noundef %b) {
; CHECK-LABEL: @PR38781(
@@ -97,3 +102,62 @@ lor.end:
%t0 = phi i1 [ true, %entry ], [ %cmp6, %lor.rhs ]
ret i1 %t0
}
+
+ at c = global i32 0, align 4
+
+declare void @foo(...) #3
+
+define i32 @PR56119(i32 %e.coerce) {
+; O1-LABEL: @PR56119(
+; O1-NEXT: entry:
+; O1-NEXT: [[CONV2:%.*]] = and i32 [[E_COERCE:%.*]], 255
+; O1-NEXT: [[REM:%.*]] = urem i32 [[CONV2]], 255
+; O1-NEXT: [[CMP:%.*]] = icmp eq i32 [[REM]], 7
+; O1-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
+; O1: if.then:
+; O1-NEXT: call void (...) @foo()
+; O1-NEXT: br label [[IF_END]]
+; O1: if.end:
+; O1-NEXT: [[TMP0:%.*]] = load i32, ptr @c, align 4
+; O1-NEXT: ret i32 [[TMP0]]
+;
+; OZ-LABEL: @PR56119(
+; OZ-NEXT: entry:
+; OZ-NEXT: [[E_COERCE_FR:%.*]] = freeze i32 [[E_COERCE:%.*]]
+; OZ-NEXT: [[REM_LHS_TRUNC:%.*]] = trunc i32 [[E_COERCE_FR]] to i8
+; OZ-NEXT: [[DOTNOT:%.*]] = icmp ne i8 [[REM_LHS_TRUNC]], -1
+; OZ-NEXT: [[E_COERCE_FR_OP:%.*]] = and i32 [[E_COERCE_FR]], 255
+; OZ-NEXT: [[CMP2:%.*]] = icmp eq i32 [[E_COERCE_FR_OP]], 7
+; OZ-NEXT: [[CMP:%.*]] = and i1 [[DOTNOT]], [[CMP2]]
+; OZ-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
+; OZ: if.then:
+; OZ-NEXT: tail call void (...) @foo()
+; OZ-NEXT: br label [[IF_END]]
+; OZ: if.end:
+; OZ-NEXT: [[TMP0:%.*]] = load i32, ptr @c, align 4
+; OZ-NEXT: ret i32 [[TMP0]]
+;
+entry:
+ %e = alloca %struct.a, align 4
+ %coerce.dive = getelementptr inbounds %struct.a, ptr %e, i32 0, i32 0
+ store i32 %e.coerce, ptr %coerce.dive, align 4
+ %b = getelementptr inbounds %struct.a, ptr %e, i32 0, i32 0
+ %0 = load i32, ptr %b, align 4
+ %conv = trunc i32 %0 to i8
+ %conv1 = trunc i64 -1 to i8
+ %conv2 = zext i8 %conv to i32
+ %conv3 = zext i8 %conv1 to i32
+ %rem = srem i32 %conv2, %conv3
+ %conv4 = trunc i32 %rem to i8
+ %conv5 = sext i8 %conv4 to i32
+ %cmp = icmp eq i32 7, %conv5
+ br i1 %cmp, label %if.then, label %if.end
+
+if.then:
+ call void (...) @foo() #5
+ br label %if.end
+
+if.end:
+ %1 = load i32, ptr @c, align 4
+ ret i32 %1
+}
More information about the llvm-commits
mailing list