llvm-project/llvm/test/Transforms/DCE/intrinsics-mips.ll
Kevin McAfee 99a10f1fe8
Update load intrinsic attributes (#101562)
This patch adds default attributes to many intrinsics and the WillReturn
attribute to some as well. The defaults include WillReturn. The WillReturn
attribute is relevant for dead code elimination as intrinsics without
WillReturn are assumed to have side effects and cannot be removed even
if their return value is unused. It is also relevant for potential
changes to SDAG behavior regarding treatment of intrinsics that function
as loads.
2024-08-15 13:34:49 -07:00

132 lines
3.7 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S < %s -passes=dce | FileCheck %s
declare i32 @llvm.mips.rddsp(i32)
declare <4 x i8> @llvm.mips.pick.qb(<4 x i8>, <4 x i8>)
declare <2 x i16> @llvm.mips.pick.ph(<2 x i16>, <2 x i16>)
declare i32 @llvm.mips.bposge32()
declare i32 @llvm.mips.lbux(ptr, i32)
declare i32 @llvm.mips.lhx(ptr, i32)
declare i32 @llvm.mips.lwx(ptr, i32)
declare <16 x i8> @llvm.mips.ld.b(ptr, i32)
declare <8 x i16> @llvm.mips.ld.h(ptr, i32)
declare <4 x i32> @llvm.mips.ld.w(ptr, i32)
declare <2 x i64> @llvm.mips.ld.d(ptr, i32)
declare <2 x i64> @llvm.mips.ldr.d(ptr, i32)
declare <4 x i32> @llvm.mips.ldr.w(ptr, i32)
define void @test_mips_rddsp() {
; CHECK-LABEL: define void @test_mips_rddsp() {
; CHECK-NEXT: ret void
;
%v = call i32 @llvm.mips.rddsp(i32 4)
ret void
}
define void @test_llvm_mips_pick_qb(<4 x i8> %a, <4 x i8> %b) {
; CHECK-LABEL: define void @test_llvm_mips_pick_qb(
; CHECK-SAME: <4 x i8> [[A:%.*]], <4 x i8> [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <4 x i8> @llvm.mips.pick.qb(<4 x i8> %a, <4 x i8> %b)
ret void
}
define void @test_llvm_mips_pick_ph(<2 x i16> %a, <2 x i16> %b) {
; CHECK-LABEL: define void @test_llvm_mips_pick_ph(
; CHECK-SAME: <2 x i16> [[A:%.*]], <2 x i16> [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <2 x i16> @llvm.mips.pick.ph(<2 x i16> %a, <2 x i16> %b)
ret void
}
define void @test_llvm_mips_bposge32() {
; CHECK-LABEL: define void @test_llvm_mips_bposge32() {
; CHECK-NEXT: ret void
;
%v = call i32 @llvm.mips.bposge32()
ret void
}
define void @test_llvm_mips_lbux(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_lbux(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call i32 @llvm.mips.lbux(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_lhx(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_lhx(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call i32 @llvm.mips.lhx(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_lwx(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_lwx(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call i32 @llvm.mips.lwx(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ld_b(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ld_b(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <16 x i8> @llvm.mips.ld.b(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ld_h(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ld_h(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <8 x i16> @llvm.mips.ld.h(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ld_w(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ld_w(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <4 x i32> @llvm.mips.ld.w(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ld_d(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ld_d(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <2 x i64> @llvm.mips.ld.d(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ldr_d(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ldr_d(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <2 x i64> @llvm.mips.ldr.d(ptr %a, i32 %b)
ret void
}
define void @test_llvm_mips_ldr_w(ptr %a, i32 %b) {
; CHECK-LABEL: define void @test_llvm_mips_ldr_w(
; CHECK-SAME: ptr [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT: ret void
;
%v = call <4 x i32> @llvm.mips.ldr.w(ptr %a, i32 %b)
ret void
}