brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 89cb25f Raw
72 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64-none-linux-gnu -mcpu=neoverse-n1 -verify-machineinstrs < %s | FileCheck %s3 4; The tests check the following optimization of DAGCombiner for AArch64:5; CMP(A,C)||CMP(B,C) => CMP(MIN/MAX(A,B), C)6; CMP(A,C)&&CMP(B,C) => CMP(MIN/MAX(A,B), C)7 8define i1 @test1(float %arg1, float %arg2, float %arg3) #0 {9; CHECK-LABEL: test1:10; CHECK:       // %bb.0:11; CHECK-NEXT:    fminnm s0, s0, s112; CHECK-NEXT:    fcmp s0, s213; CHECK-NEXT:    cset w0, mi14; CHECK-NEXT:    ret15  %cmp1 = fcmp olt float %arg1, %arg316  %cmp2 = fcmp olt float %arg2, %arg317  %or1  = or i1 %cmp1, %cmp218  ret i1 %or119}20 21define i1 @test2(double %arg1, double %arg2, double %arg3) #0 {22; CHECK-LABEL: test2:23; CHECK:       // %bb.0:24; CHECK-NEXT:    fmaxnm d0, d0, d125; CHECK-NEXT:    fcmp d0, d226; CHECK-NEXT:    cset w0, gt27; CHECK-NEXT:    ret28  %cmp1 = fcmp ogt double %arg1, %arg329  %cmp2 = fcmp ogt double %arg2, %arg330  %or1  = or i1 %cmp1, %cmp231  ret i1 %or132}33 34define i1 @test3(float %arg1, float %arg2, float %arg3) {35; CHECK-LABEL: test3:36; CHECK:       // %bb.0:37; CHECK-NEXT:    fmov s3, #1.0000000038; CHECK-NEXT:    fadd s0, s0, s339; CHECK-NEXT:    fmov s3, #2.0000000040; CHECK-NEXT:    fadd s1, s1, s341; CHECK-NEXT:    fmaxnm s0, s0, s142; CHECK-NEXT:    fcmp s0, s243; CHECK-NEXT:    cset w0, lt44; CHECK-NEXT:    ret45  %add1 = fadd nnan float %arg1, 1.046  %add2 = fadd nnan float %arg2, 2.047  %cmp1 = fcmp nnan olt float %add1, %arg348  %cmp2 = fcmp nnan olt float %add2, %arg349  %or1  = and i1 %cmp1, %cmp250  ret i1 %or151}52 53define i1 @test4(float %arg1, float %arg2, float %arg3) {54; CHECK-LABEL: test4:55; CHECK:       // %bb.0:56; CHECK-NEXT:    fmov s3, #1.0000000057; CHECK-NEXT:    fadd s0, s0, s358; CHECK-NEXT:    fmov s3, #2.0000000059; CHECK-NEXT:    fadd s1, s1, s360; CHECK-NEXT:    fminnm s0, s0, s161; CHECK-NEXT:    fcmp s0, s262; CHECK-NEXT:    cset w0, gt63; CHECK-NEXT:    ret64  %add1 = fadd nnan float %arg1, 1.065  %add2 = fadd nnan float %arg2, 2.066  %cmp1 = fcmp nnan ogt float %add1, %arg367  %cmp2 = fcmp nnan ogt float %add2, %arg368  %or1  = and i1 %cmp1, %cmp269  ret i1 %or170}71 72