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