llvm-project/llvm/test/Feature/vector-cast-constant-exprs.ll
Nikita Popov 17764d2c87
[IR] Remove FP cast constant expressions (#71408)
Remove support for the fptrunc, fpext, fptoui, fptosi, uitofp and sitofp
constant expressions. All places creating them have been removed
beforehand, so this just removes the APIs and uses of these constant
expressions in tests.

With this, the only remaining FP operation that still has constant
expression support is fcmp.

This is part of
https://discourse.llvm.org/t/rfc-remove-most-constant-expressions/63179.
2023-11-07 09:34:16 +01:00

66 lines
2.2 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
; All of these constant expressions should fold.
define <2 x float> @ga() {
; CHECK-LABEL: define <2 x float> @ga() {
; CHECK-NEXT: ret <2 x float> <float 0x4011333340000000, float 0x40099999A0000000>
;
%fptrunc = fptrunc <2 x double> <double 4.3, double 3.2> to <2 x float>
ret <2 x float> %fptrunc
}
define <2 x double> @gb() {
; CHECK-LABEL: define <2 x double> @gb() {
; CHECK-NEXT: ret <2 x double> <double 2.000000e+00, double 8.000000e+00>
;
%fpext = fpext <2 x float><float 2.0, float 8.0> to <2 x double>
ret <2 x double> %fpext
}
define <2 x i32> @gf() {
; CHECK-LABEL: define <2 x i32> @gf() {
; CHECK-NEXT: ret <2 x i32> <i32 3, i32 4>
;
ret <2 x i32> trunc (<2 x i64><i64 3, i64 4> to <2 x i32>)
}
define <2 x i32> @gh() {
; CHECK-LABEL: define <2 x i32> @gh() {
; CHECK-NEXT: ret <2 x i32> <i32 8, i32 7>
;
%fptoui = fptoui <2 x float><float 8.0, float 7.0> to <2 x i32>
ret <2 x i32> %fptoui
}
define <2 x i32> @gi() {
; CHECK-LABEL: define <2 x i32> @gi() {
; CHECK-NEXT: ret <2 x i32> <i32 8, i32 7>
;
%fptosi = fptosi <2 x float><float 8.0, float 7.0> to <2 x i32>
ret <2 x i32> %fptosi
}
define <2 x float> @gj() {
; CHECK-LABEL: define <2 x float> @gj() {
; CHECK-NEXT: ret <2 x float> <float 8.000000e+00, float 7.000000e+00>
;
%uitofp = uitofp <2 x i32><i32 8, i32 7> to <2 x float>
ret <2 x float> %uitofp
}
define <2 x float> @gk() {
; CHECK-LABEL: define <2 x float> @gk() {
; CHECK-NEXT: ret <2 x float> <float 8.000000e+00, float 7.000000e+00>
;
%sitofp = sitofp <2 x i32><i32 8, i32 7> to <2 x float>
ret <2 x float> %sitofp
}
define <2 x double> @gl() {
; CHECK-LABEL: define <2 x double> @gl() {
; CHECK-NEXT: ret <2 x double> <double 4.000000e+00, double 3.000000e+00>
;
ret <2 x double> bitcast (<2 x double><double 4.0, double 3.0> to <2 x double>)
}
define <2 x double> @gm() {
; CHECK-LABEL: define <2 x double> @gm() {
; CHECK-NEXT: ret <2 x double> <double 1.976260e-323, double 1.482200e-323>
;
ret <2 x double> bitcast (<2 x i64><i64 4, i64 3> to <2 x double>)
}