blob: 8c0a1a55cb2cbc36d4a5e76a4109239ede1c2940 [file] [log] [blame] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
define i1 @poison(float %x) {
; CHECK-LABEL: @poison(
; CHECK-NEXT: ret i1 poison
;
%v = fcmp oeq float %x, poison
ret i1 %v
}
define i1 @poison2(float %x) {
; CHECK-LABEL: @poison2(
; CHECK-NEXT: ret i1 poison
;
%v = fcmp ueq float %x, poison
ret i1 %v
}
define i1 @pr130408(x86_fp80 %x) {
; CHECK-LABEL: @pr130408(
; CHECK-NEXT: [[BITS:%.*]] = bitcast x86_fp80 [[X:%.*]] to i80
; CHECK-NEXT: [[MASKED:%.*]] = and i80 [[BITS]], -604444463063240877801473
; CHECK-NEXT: [[OR:%.*]] = or i80 [[MASKED]], 302194561415509874573312
; CHECK-NEXT: [[FP:%.*]] = bitcast i80 [[OR]] to x86_fp80
; CHECK-NEXT: [[RES:%.*]] = fcmp uno x86_fp80 [[FP]], 0xK00000000000000000000
; CHECK-NEXT: ret i1 [[RES]]
;
%bits = bitcast x86_fp80 %x to i80
%masked = and i80 %bits, -604444463063240877801473
%or = or i80 %masked, 302194561415509874573312
%fp = bitcast i80 %or to x86_fp80
%res = fcmp uno x86_fp80 %fp, 0xK00000000000000000000
ret i1 %res
}
define i1 @direct_bitcast() {
; CHECK-LABEL: @direct_bitcast(
; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ogt bfloat bitcast (half 0xH7C00 to bfloat), 0xR7F80 ; rhs is +inf
ret i1 %cmp
}
define i1 @bitcast_first() {
; CHECK-LABEL: @bitcast_first(
; CHECK-NEXT: ret i1 false
;
%lhs = bitcast half 0xH7C00 to bfloat
%cmp = fcmp ogt bfloat %lhs, 0xR7F80
ret i1 %cmp
}
define i1 @direct_bitcast_uge() {
; CHECK-LABEL: @direct_bitcast_uge(
; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uge bfloat bitcast (half 0xH7C00 to bfloat), 0xRff80
ret i1 %cmp
}
@g = external global i8
define i1 @bitcast_cannot_be_folded() {
; CHECK-LABEL: @bitcast_cannot_be_folded(
; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ogt bfloat bitcast (i16 ptrtoint (ptr @g to i16) to bfloat), 0xR7F80 ; rhs is +inf
ret i1 %cmp
}