[llvm] [SelectionDAG] Mark LowerTypeTests as required and remove intrinsic handling from #142939 (PR #179249)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 2 07:05:26 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: None (keremsahn)
<details>
<summary>Changes</summary>
Fixes #<!-- -->179125
Tests:
ThinLTO pipeline -- Running pass: LowerTypeTestsPass on [module]
LTO pipeline -- Running pass: LowerTypeTestsPass on [module]
Running pass: LowerTypeTestsPass on [module]
Codegen Regression -- Total Discovered Tests: 5373
Unsupported : 78 (1.45%)
Passed : 5283 (98.32%)
Expectedly Failed: 12 (0.22%)
This is my first contribution to an OSS, please inform me about what i could do better or what i did wrong
---
Full diff: https://github.com/llvm/llvm-project/pull/179249.diff
3 Files Affected:
- (modified) llvm/include/llvm/Transforms/IPO/LowerTypeTests.h (+1)
- (modified) llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (-5)
- (modified) llvm/test/CodeGen/X86/pr142937.ll (+16-35)
``````````diff
diff --git a/llvm/include/llvm/Transforms/IPO/LowerTypeTests.h b/llvm/include/llvm/Transforms/IPO/LowerTypeTests.h
index a34cbaf72675b..bb8b40955077e 100644
--- a/llvm/include/llvm/Transforms/IPO/LowerTypeTests.h
+++ b/llvm/include/llvm/Transforms/IPO/LowerTypeTests.h
@@ -218,6 +218,7 @@ class LowerTypeTestsPass : public PassInfoMixin<LowerTypeTestsPass> {
lowertypetests::DropTestKind::None)
: ExportSummary(ExportSummary), ImportSummary(ImportSummary),
DropTypeTests(DropTypeTests) {}
+ static bool isRequired() { return true; }
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
};
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 52e0d8fefdf2f..49f5494ed894c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -7522,11 +7522,6 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
setValue(&I, getValue(I.getOperand(0)));
return;
- case Intrinsic::type_test:
- case Intrinsic::public_type_test:
- setValue(&I, getValue(ConstantInt::getTrue(I.getType())));
- return;
-
case Intrinsic::assume:
case Intrinsic::experimental_noalias_scope_decl:
case Intrinsic::var_annotation:
diff --git a/llvm/test/CodeGen/X86/pr142937.ll b/llvm/test/CodeGen/X86/pr142937.ll
index 8be99e102ff5b..650093d65a25e 100644
--- a/llvm/test/CodeGen/X86/pr142937.ll
+++ b/llvm/test/CodeGen/X86/pr142937.ll
@@ -1,47 +1,32 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; RUN: llc < %s -mtriple=i686-- -O0 | FileCheck %s --check-prefix=X86
-; RUN: llc < %s -mtriple=x86_64-- -O0 | FileCheck %s --check-prefix=X64
-
-define void @public_type_test() {
-; X86-LABEL: public_type_test:
-; X86: # %bb.0: # %bb
-; X86-NEXT: movb $1, %al
-; X86-NEXT: # %bb.1: # %bb1
-; X86-NEXT: retl
-;
-; X64-LABEL: public_type_test:
-; X64: # %bb.0: # %bb
-; X64-NEXT: movb $1, %al
-; X64-NEXT: # %bb.1: # %bb1
-; X64-NEXT: retq
-bb:
- %call = call i1 @llvm.public.type.test(ptr null, metadata !"typeinfo")
- br label %bb1
-
-bb1:
- call void @llvm.assume(i1 %call)
- ret void
-}
+; RUN: opt -passes='lowertypetests' -S %s \
+; RUN: | llc -mtriple=i686-- -O0 | FileCheck %s --check-prefix=X86
+; RUN: opt -passes='lowertypetests' -S %s \
+; RUN: | llc -mtriple=x86_64-- -O0 | FileCheck %s --check-prefix=X64
define void @type_test() {
; X86-LABEL: type_test:
; X86: # %bb.0: # %bb
-; X86-NEXT: movb $1, %al
+; X86-NEXT: xorl %eax, %eax
+; X86-NEXT: # kill: def $al killed $al killed $eax
; X86-NEXT: testb $1, %al
-; X86-NEXT: jne .LBB1_2
-; X86-NEXT: # %bb.1: # %bb1
+; X86-NEXT: jne .LBB0_2
+; X86-NEXT: jmp .LBB0_1
+; X86-NEXT: .LBB0_1: # %bb1
; X86-NEXT: ud1l 2(%eax), %eax
-; X86-NEXT: .LBB1_2: # %bb2
+; X86-NEXT: .LBB0_2: # %bb2
; X86-NEXT: retl
;
; X64-LABEL: type_test:
; X64: # %bb.0: # %bb
-; X64-NEXT: movb $1, %al
+; X64-NEXT: xorl %eax, %eax
+; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: testb $1, %al
-; X64-NEXT: jne .LBB1_2
-; X64-NEXT: # %bb.1: # %bb1
+; X64-NEXT: jne .LBB0_2
+; X64-NEXT: jmp .LBB0_1
+; X64-NEXT: .LBB0_1: # %bb1
; X64-NEXT: ud1l 2(%eax), %eax
-; X64-NEXT: .LBB1_2: # %bb2
+; X64-NEXT: .LBB0_2: # %bb2
; X64-NEXT: retq
bb:
%call = tail call i1 @llvm.type.test(ptr null, metadata !"typeinfo")
@@ -55,10 +40,6 @@ bb2:
ret void
}
-declare i1 @llvm.public.type.test(ptr, metadata)
-
-declare void @llvm.assume(i1 noundef)
-
declare i1 @llvm.type.test(ptr, metadata)
declare void @llvm.ubsantrap(i8 immarg)
``````````
</details>
https://github.com/llvm/llvm-project/pull/179249
More information about the llvm-commits
mailing list