1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/test/Transforms/InstSimplify/bswap.ll
Philip Reames ca99cf7d94 Extend known bits to understand @llvm.bswap
This is a cleaned up patch from the one written by John Regehr based on the findings of the Souper superoptimizer.

When writing tests, I was surprised to find that instsimplify apparently doesn't know how to collapse bit test sequences based purely on known bits. This required me to split my tests across both instsimplify and instcombine.

Differential Revision: http://reviews.llvm.org/D13250

llvm-svn: 249453
2015-10-06 20:20:45 +00:00

42 lines
857 B
LLVM

; RUN: opt < %s -S -instsimplify | FileCheck %s
declare i16 @llvm.bswap.i16(i16)
define i1 @test1(i16 %arg) {
; CHECK-LABEL: @test1
; CHECK: ret i1 false
%a = or i16 %arg, 1
%b = call i16 @llvm.bswap.i16(i16 %a)
%res = icmp eq i16 %b, 0
ret i1 %res
}
define i1 @test2(i16 %arg) {
; CHECK-LABEL: @test2
; CHECK: ret i1 false
%a = or i16 %arg, 1024
%b = call i16 @llvm.bswap.i16(i16 %a)
%res = icmp eq i16 %b, 0
ret i1 %res
}
define i1 @test3(i16 %arg) {
; CHECK-LABEL: @test3
; CHECK: ret i1 false
%a = and i16 %arg, 1
%b = call i16 @llvm.bswap.i16(i16 %a)
%and = and i16 %b, 1
%res = icmp eq i16 %and, 1
ret i1 %res
}
define i1 @test4(i16 %arg) {
; CHECK-LABEL: @test4
; CHECK: ret i1 false
%a = and i16 %arg, 511
%b = call i16 @llvm.bswap.i16(i16 %a)
%and = and i16 %b, 256
%res = icmp eq i16 %and, 1
ret i1 %res
}