From 7dc3b726851866179f147262363cc14ead70abd3 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Sun, 2 Aug 2009 21:49:05 +0000 Subject: [PATCH] Remove unneeded intrinsics from Blackfin backend. __builtin_bfin_ones does the same as ctpop, so it can be implemented in the front-end. __builtin_bfin_loadbytes loads from an unaligned pointer with the disalignexcpt instruction. It does the same as loading from a pointer with the low bits masked. It is better if the front-end creates a masked load. We can always instruction select the masked to disalignexcpt+load. We keep csync/ssync/idle. These intrinsics represent instructions that need workarounds for some silicon revisions. We may even want to convert inline assembler to intrinsics to enable the workarounds. llvm-svn: 77917 --- llvm/include/llvm/IntrinsicsBlackfin.td | 17 ----------------- llvm/lib/Target/Blackfin/BlackfinInstrInfo.td | 8 +------- llvm/test/CodeGen/Blackfin/load-intr.ll | 13 ------------- 3 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 llvm/test/CodeGen/Blackfin/load-intr.ll diff --git a/llvm/include/llvm/IntrinsicsBlackfin.td b/llvm/include/llvm/IntrinsicsBlackfin.td index 3a4052b6b855..188e18cc91f6 100644 --- a/llvm/include/llvm/IntrinsicsBlackfin.td +++ b/llvm/include/llvm/IntrinsicsBlackfin.td @@ -32,20 +32,3 @@ let TargetPrefix = "bfin" in { Intrinsic<[llvm_void_ty]>; } - -//===----------------------------------------------------------------------===// -// Miscellaneous GCC-compatible builtins. -// - -let TargetPrefix = "bfin" in { - - // Almost identical to ctpop except for the type signature - def int_bfin_ones : GCCBuiltin<"__builtin_bfin_ones">, - Intrinsic<[llvm_i16_ty], [llvm_i32_ty], [IntrNoMem]>; - - // Load unaligned pointer, ignoring the low bits. Like *(p&~3). - // This uses the disalignexcpt instruction - def int_bfin_loadbytes : GCCBuiltin<"__builtin_bfin_loadbytes">, - Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; - -} diff --git a/llvm/lib/Target/Blackfin/BlackfinInstrInfo.td b/llvm/lib/Target/Blackfin/BlackfinInstrInfo.td index 6faec2714390..b0a2cc13c4cb 100644 --- a/llvm/lib/Target/Blackfin/BlackfinInstrInfo.td +++ b/llvm/lib/Target/Blackfin/BlackfinInstrInfo.td @@ -672,9 +672,8 @@ def NBITTST: F1<(outs JustCC:$cc), (ins D:$src1, uimm5mask:$src2), def ONES: F2<(outs D16L:$dst), (ins D:$src), "$dst = ones $src;", - [(set D16L:$dst, (int_bfin_ones D:$src))]>; + [(set D16L:$dst, (trunc (ctpop D:$src)))]>; -def : Pat<(i16 (trunc (ctpop D:$src))), (ONES D:$src)>; def : Pat<(ctpop D:$src), (MOVEzext (ONES D:$src))>; //===----------------------------------------------------------------------===// @@ -848,11 +847,6 @@ def ALIGN24 : F2<(outs D:$dst), (ins D:$src1, D:$src2), def DISALGNEXCPT : F2<(outs), (ins), "disalignexcpt;", []>; -// This is really two instructions in parallel, but we don't support vliw yet -def DISALGNEXCPT_LOAD : F2<(outs D:$dst), (ins I:$ptr), - "disalignexcpt \\|\\| $dst = [$ptr];", - [(set D:$dst, (int_bfin_loadbytes I:$ptr))]>; - // TODO: BYTEOP3P, BYTEOP16P, BYTEOP1P, BYTEOP2P, BYTEOP16M, SAA, // BYTEPACK, BYTEUNPACK diff --git a/llvm/test/CodeGen/Blackfin/load-intr.ll b/llvm/test/CodeGen/Blackfin/load-intr.ll deleted file mode 100644 index 9ef8b978aca7..000000000000 --- a/llvm/test/CodeGen/Blackfin/load-intr.ll +++ /dev/null @@ -1,13 +0,0 @@ -; RUN: llvm-as < %s | llc -march=bfin -verify-machineinstrs | FileCheck %s - -define i16 @f(i32* %p) nounwind { -entry: - ; CHECK: disalignexcpt || r0 = [i0]; - %b = call i32 @llvm.bfin.loadbytes(i32* %p) - ; CHECK: r0.l = ones r0; - %c = call i16 @llvm.bfin.ones(i32 %b) - ret i16 %c -} - -declare void @llvm.bfin.ones() nounwind -declare void @llvm.bfin.loadbytes() nounwind