; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" define @test_fcvt_bf16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_bf16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.bf16f32.v2( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f16f32( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f16_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f16_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f16f64( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f32f16( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f64f16( %a, zeroinitializer, %b) ret %out } define @test_fcvt_f64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvt.f64f32( %a, zeroinitializer, %b) ret %out } define @test_fcvtlt_f32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtlt_f32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtlt.f32f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtlt_f64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtlt_f64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtlt.f64f32( %a, zeroinitializer, %b) ret %out } define @test_fcvtnt_bf16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_bf16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtnt.bf16f32.v2( %a, zeroinitializer, %b) ret %out } define @test_fcvtnt_f16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_f16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtnt.f16f32( %a, zeroinitializer, %b) ret %out } define @test_fcvtnt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtnt.f32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvtx_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtx_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtx.f32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvtxnt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtxnt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtxnt.f32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvtzs( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzs_i32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzs.i32f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzs_i32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzs.i32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvtzs_i64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzs.i64f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzs_i64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzs.i64f32( %a, zeroinitializer, %b) ret %out } define @test_fcvtzu( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzu_i32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzu.i32f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzu_i32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzu.i32f64( %a, zeroinitializer, %b) ret %out } define @test_fcvtzu_i64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzu.i64f16( %a, zeroinitializer, %b) ret %out } define @test_fcvtzu_i64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.fcvtzu.i64f32( %a, zeroinitializer, %b) ret %out } define @test_scvtf( %a, %b) { ; CHECK-LABEL: define @test_scvtf( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16( %a, zeroinitializer, %b) ret %out } define @test_scvtf_f16_i32( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f16_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.scvtf.f16i32( %a, zeroinitializer, %b) ret %out } define @test_scvtf_f16_i64( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f16_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.scvtf.f16i64( %a, zeroinitializer, %b) ret %out } define @test_scvtf_f32_i64( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f32_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.scvtf.f32i64( %a, zeroinitializer, %b) ret %out } define @test_scvtf_f64_i32( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f64_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.scvtf.f64i32( %a, zeroinitializer, %b) ret %out } define @test_ucvtf( %a, %b) { ; CHECK-LABEL: define @test_ucvtf( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16( %a, zeroinitializer, %b) ret %out } define @test_ucvtf_f16_i32( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f16_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.ucvtf.f16i32( %a, zeroinitializer, %b) ret %out } define @test_ucvtf_f16_i64( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f16_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.ucvtf.f16i64( %a, zeroinitializer, %b) ret %out } define @test_ucvtf_f32_i64( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f32_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.ucvtf.f32i64( %a, zeroinitializer, %b) ret %out } define @test_ucvtf_f64_i32( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f64_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { ; CHECK-NEXT: ret [[A]] ; %out = call @llvm.aarch64.sve.ucvtf.f64i32( %a, zeroinitializer, %b) ret %out }