[llvm] [LLVM] BasicTTIImpl allow unknown type during legality checking (PR #89848)
Billy Zhu via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 11:38:14 PDT 2024
https://github.com/zyx-billy updated https://github.com/llvm/llvm-project/pull/89848
>From 0eeeced2379a38986a79e10fbf85db9d6ea88ae1 Mon Sep 17 00:00:00 2001
From: Billy Zhu <billyzhu at modular.com>
Date: Mon, 22 Apr 2024 11:05:36 -0700
Subject: [PATCH 1/2] allow unknown
---
llvm/include/llvm/CodeGen/BasicTTIImpl.h | 2 +-
.../SimplifyCFG/X86/switch_to_lookup_table.ll | 22 +++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 92b51438b4cb3c..c6e90e57e46edb 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -426,7 +426,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
bool useAA() const { return getST()->useAA(); }
bool isTypeLegal(Type *Ty) {
- EVT VT = getTLI()->getValueType(DL, Ty);
+ EVT VT = getTLI()->getValueType(DL, Ty, /*AllowUnknown=*/true);
return getTLI()->isTypeLegal(VT);
}
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
index 3873f0c0ae0bbd..9e3bb2368e7a4d 100644
--- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
+++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
@@ -2068,3 +2068,25 @@ cond.end: ; preds = %entry, %cond.false
%conv = sext i3 %cond to i8
ret i8 %conv
}
+
+; Don't create a table with an unknown type
+define { i8, i8 } @test_unknown_result_type(i8 %n) {
+; CHECK-LABEL: @test_unknown_result_type(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: switch
+entry:
+ switch i8 %n, label %sw.default [
+ i8 0, label %return
+ i8 1, label %return
+ i8 2, label %return
+ ]
+
+sw.default: ; preds = %entry
+ %0 = insertvalue { i8, i8 } undef, i8 0, 0
+ %1 = insertvalue { i8, i8 } %0, i8 1, 1
+ br label %return
+
+return: ; preds = %sw.default, %entry, %entry, %entry
+ %retval.0 = phi { i8, i8 } [ undef, %entry ], [ undef, %entry ], [ undef, %entry ], [ %1, %sw.default ]
+ ret { i8, i8 } %retval.0
+}
>From b9f0402c48038a501eabf2a86c834d246aa6b81f Mon Sep 17 00:00:00 2001
From: Billy Zhu <billyzhu at modular.com>
Date: Thu, 2 May 2024 10:29:11 -0700
Subject: [PATCH 2/2] update test with script
---
.../SimplifyCFG/X86/switch_to_lookup_table.ll | 22 ++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
index 9e3bb2368e7a4d..9d6502072c16bc 100644
--- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
+++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll
@@ -2072,13 +2072,25 @@ cond.end: ; preds = %entry, %cond.false
; Don't create a table with an unknown type
define { i8, i8 } @test_unknown_result_type(i8 %n) {
; CHECK-LABEL: @test_unknown_result_type(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: switch
+; CHECK-NEXT: entry:
+; CHECK-NEXT: switch i8 [[N:%.*]], label [[SW_DEFAULT:%.*]] [
+; CHECK-NEXT: i8 0, label [[RETURN:%.*]]
+; CHECK-NEXT: i8 1, label [[RETURN]]
+; CHECK-NEXT: i8 2, label [[RETURN]]
+; CHECK-NEXT: ]
+; CHECK: sw.default:
+; CHECK-NEXT: [[TMP0:%.*]] = insertvalue { i8, i8 } undef, i8 0, 0
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { i8, i8 } [[TMP0]], i8 1, 1
+; CHECK-NEXT: br label [[RETURN]]
+; CHECK: return:
+; CHECK-NEXT: [[RETVAL_0:%.*]] = phi { i8, i8 } [ undef, [[ENTRY:%.*]] ], [ undef, [[ENTRY]] ], [ undef, [[ENTRY]] ], [ [[TMP1]], [[SW_DEFAULT]] ]
+; CHECK-NEXT: ret { i8, i8 } [[RETVAL_0]]
+;
entry:
switch i8 %n, label %sw.default [
- i8 0, label %return
- i8 1, label %return
- i8 2, label %return
+ i8 0, label %return
+ i8 1, label %return
+ i8 2, label %return
]
sw.default: ; preds = %entry
More information about the llvm-commits
mailing list