326 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-uknown-uknown -verify-machineinstrs -o - %s | FileCheck %s3 4declare void @call()5 6define i1 @cmp_i128_eq(i128 %a, i128 %b) {7; CHECK-LABEL: cmp_i128_eq:8; CHECK: // %bb.0:9; CHECK-NEXT: cmp x0, x210; CHECK-NEXT: ccmp x1, x3, #0, eq11; CHECK-NEXT: cset w0, eq12; CHECK-NEXT: ret13 %cmp = icmp eq i128 %a, %b14 ret i1 %cmp15}16 17define i1 @cmp_i128_ne(i128 %a, i128 %b) {18; CHECK-LABEL: cmp_i128_ne:19; CHECK: // %bb.0:20; CHECK-NEXT: cmp x0, x221; CHECK-NEXT: ccmp x1, x3, #0, eq22; CHECK-NEXT: cset w0, ne23; CHECK-NEXT: ret24 %cmp = icmp ne i128 %a, %b25 ret i1 %cmp26}27 28define i1 @cmp_i128_ugt(i128 %a, i128 %b) {29; CHECK-LABEL: cmp_i128_ugt:30; CHECK: // %bb.0:31; CHECK-NEXT: cmp x2, x032; CHECK-NEXT: sbcs xzr, x3, x133; CHECK-NEXT: cset w0, lo34; CHECK-NEXT: ret35 %cmp = icmp ugt i128 %a, %b36 ret i1 %cmp37}38 39define i1 @cmp_i128_uge(i128 %a, i128 %b) {40; CHECK-LABEL: cmp_i128_uge:41; CHECK: // %bb.0:42; CHECK-NEXT: cmp x0, x243; CHECK-NEXT: sbcs xzr, x1, x344; CHECK-NEXT: cset w0, hs45; CHECK-NEXT: ret46 %cmp = icmp uge i128 %a, %b47 ret i1 %cmp48}49 50define i1 @cmp_i128_ult(i128 %a, i128 %b) {51; CHECK-LABEL: cmp_i128_ult:52; CHECK: // %bb.0:53; CHECK-NEXT: cmp x0, x254; CHECK-NEXT: sbcs xzr, x1, x355; CHECK-NEXT: cset w0, lo56; CHECK-NEXT: ret57 %cmp = icmp ult i128 %a, %b58 ret i1 %cmp59}60 61define i1 @cmp_i128_ule(i128 %a, i128 %b) {62; CHECK-LABEL: cmp_i128_ule:63; CHECK: // %bb.0:64; CHECK-NEXT: cmp x2, x065; CHECK-NEXT: sbcs xzr, x3, x166; CHECK-NEXT: cset w0, hs67; CHECK-NEXT: ret68 %cmp = icmp ule i128 %a, %b69 ret i1 %cmp70}71 72define i1 @cmp_i128_sgt(i128 %a, i128 %b) {73; CHECK-LABEL: cmp_i128_sgt:74; CHECK: // %bb.0:75; CHECK-NEXT: cmp x2, x076; CHECK-NEXT: sbcs xzr, x3, x177; CHECK-NEXT: cset w0, lt78; CHECK-NEXT: ret79 %cmp = icmp sgt i128 %a, %b80 ret i1 %cmp81}82 83define i1 @cmp_i128_sge(i128 %a, i128 %b) {84; CHECK-LABEL: cmp_i128_sge:85; CHECK: // %bb.0:86; CHECK-NEXT: cmp x0, x287; CHECK-NEXT: sbcs xzr, x1, x388; CHECK-NEXT: cset w0, ge89; CHECK-NEXT: ret90 %cmp = icmp sge i128 %a, %b91 ret i1 %cmp92}93 94define i1 @cmp_i128_slt(i128 %a, i128 %b) {95; CHECK-LABEL: cmp_i128_slt:96; CHECK: // %bb.0:97; CHECK-NEXT: cmp x0, x298; CHECK-NEXT: sbcs xzr, x1, x399; CHECK-NEXT: cset w0, lt100; CHECK-NEXT: ret101 %cmp = icmp slt i128 %a, %b102 ret i1 %cmp103}104 105define i1 @cmp_i128_sle(i128 %a, i128 %b) {106; CHECK-LABEL: cmp_i128_sle:107; CHECK: // %bb.0:108; CHECK-NEXT: cmp x2, x0109; CHECK-NEXT: sbcs xzr, x3, x1110; CHECK-NEXT: cset w0, ge111; CHECK-NEXT: ret112 %cmp = icmp sle i128 %a, %b113 ret i1 %cmp114}115 116define void @br_on_cmp_i128_eq(i128 %a, i128 %b) nounwind {117; CHECK-LABEL: br_on_cmp_i128_eq:118; CHECK: // %bb.0:119; CHECK-NEXT: cmp x1, x3120; CHECK-NEXT: ccmp x0, x2, #0, eq121; CHECK-NEXT: b.ne .LBB10_2122; CHECK-NEXT: // %bb.1: // %call123; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill124; CHECK-NEXT: bl call125; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload126; CHECK-NEXT: .LBB10_2: // %exit127; CHECK-NEXT: ret128 %cmp = icmp eq i128 %a, %b129 br i1 %cmp, label %call, label %exit130call:131 call void @call()132 br label %exit133exit:134 ret void135}136 137define void @br_on_cmp_i128_ne(i128 %a, i128 %b) nounwind {138; CHECK-LABEL: br_on_cmp_i128_ne:139; CHECK: // %bb.0:140; CHECK-NEXT: cmp x1, x3141; CHECK-NEXT: ccmp x0, x2, #0, eq142; CHECK-NEXT: b.eq .LBB11_2143; CHECK-NEXT: // %bb.1: // %call144; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill145; CHECK-NEXT: bl call146; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload147; CHECK-NEXT: .LBB11_2: // %exit148; CHECK-NEXT: ret149 %cmp = icmp ne i128 %a, %b150 br i1 %cmp, label %call, label %exit151call:152 call void @call()153 br label %exit154exit:155 ret void156}157 158define void @br_on_cmp_i128_ugt(i128 %a, i128 %b) nounwind {159; CHECK-LABEL: br_on_cmp_i128_ugt:160; CHECK: // %bb.0:161; CHECK-NEXT: cmp x2, x0162; CHECK-NEXT: sbcs xzr, x3, x1163; CHECK-NEXT: b.hs .LBB12_2164; CHECK-NEXT: // %bb.1: // %call165; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill166; CHECK-NEXT: bl call167; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload168; CHECK-NEXT: .LBB12_2: // %exit169; CHECK-NEXT: ret170 %cmp = icmp ugt i128 %a, %b171 br i1 %cmp, label %call, label %exit172call:173 call void @call()174 br label %exit175exit:176 ret void177}178 179define void @br_on_cmp_i128_uge(i128 %a, i128 %b) nounwind {180; CHECK-LABEL: br_on_cmp_i128_uge:181; CHECK: // %bb.0:182; CHECK-NEXT: cmp x0, x2183; CHECK-NEXT: sbcs xzr, x1, x3184; CHECK-NEXT: b.lo .LBB13_2185; CHECK-NEXT: // %bb.1: // %call186; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill187; CHECK-NEXT: bl call188; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload189; CHECK-NEXT: .LBB13_2: // %exit190; CHECK-NEXT: ret191 %cmp = icmp uge i128 %a, %b192 br i1 %cmp, label %call, label %exit193call:194 call void @call()195 br label %exit196exit:197 ret void198}199 200define void @br_on_cmp_i128_ult(i128 %a, i128 %b) nounwind {201; CHECK-LABEL: br_on_cmp_i128_ult:202; CHECK: // %bb.0:203; CHECK-NEXT: cmp x0, x2204; CHECK-NEXT: sbcs xzr, x1, x3205; CHECK-NEXT: b.hs .LBB14_2206; CHECK-NEXT: // %bb.1: // %call207; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill208; CHECK-NEXT: bl call209; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload210; CHECK-NEXT: .LBB14_2: // %exit211; CHECK-NEXT: ret212 %cmp = icmp ult i128 %a, %b213 br i1 %cmp, label %call, label %exit214call:215 call void @call()216 br label %exit217exit:218 ret void219}220 221define void @br_on_cmp_i128_ule(i128 %a, i128 %b) nounwind {222; CHECK-LABEL: br_on_cmp_i128_ule:223; CHECK: // %bb.0:224; CHECK-NEXT: cmp x2, x0225; CHECK-NEXT: sbcs xzr, x3, x1226; CHECK-NEXT: b.lo .LBB15_2227; CHECK-NEXT: // %bb.1: // %call228; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill229; CHECK-NEXT: bl call230; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload231; CHECK-NEXT: .LBB15_2: // %exit232; CHECK-NEXT: ret233 %cmp = icmp ule i128 %a, %b234 br i1 %cmp, label %call, label %exit235call:236 call void @call()237 br label %exit238exit:239 ret void240}241 242define void @br_on_cmp_i128_sgt(i128 %a, i128 %b) nounwind {243; CHECK-LABEL: br_on_cmp_i128_sgt:244; CHECK: // %bb.0:245; CHECK-NEXT: cmp x2, x0246; CHECK-NEXT: sbcs xzr, x3, x1247; CHECK-NEXT: b.ge .LBB16_2248; CHECK-NEXT: // %bb.1: // %call249; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill250; CHECK-NEXT: bl call251; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload252; CHECK-NEXT: .LBB16_2: // %exit253; CHECK-NEXT: ret254 %cmp = icmp sgt i128 %a, %b255 br i1 %cmp, label %call, label %exit256call:257 call void @call()258 br label %exit259exit:260 ret void261}262 263define void @br_on_cmp_i128_sge(i128 %a, i128 %b) nounwind {264; CHECK-LABEL: br_on_cmp_i128_sge:265; CHECK: // %bb.0:266; CHECK-NEXT: cmp x0, x2267; CHECK-NEXT: sbcs xzr, x1, x3268; CHECK-NEXT: b.lt .LBB17_2269; CHECK-NEXT: // %bb.1: // %call270; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill271; CHECK-NEXT: bl call272; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload273; CHECK-NEXT: .LBB17_2: // %exit274; CHECK-NEXT: ret275 %cmp = icmp sge i128 %a, %b276 br i1 %cmp, label %call, label %exit277call:278 call void @call()279 br label %exit280exit:281 ret void282}283 284define void @br_on_cmp_i128_slt(i128 %a, i128 %b) nounwind {285; CHECK-LABEL: br_on_cmp_i128_slt:286; CHECK: // %bb.0:287; CHECK-NEXT: cmp x0, x2288; CHECK-NEXT: sbcs xzr, x1, x3289; CHECK-NEXT: b.ge .LBB18_2290; CHECK-NEXT: // %bb.1: // %call291; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill292; CHECK-NEXT: bl call293; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload294; CHECK-NEXT: .LBB18_2: // %exit295; CHECK-NEXT: ret296 %cmp = icmp slt i128 %a, %b297 br i1 %cmp, label %call, label %exit298call:299 call void @call()300 br label %exit301exit:302 ret void303}304 305define void @br_on_cmp_i128_sle(i128 %a, i128 %b) nounwind {306; CHECK-LABEL: br_on_cmp_i128_sle:307; CHECK: // %bb.0:308; CHECK-NEXT: cmp x2, x0309; CHECK-NEXT: sbcs xzr, x3, x1310; CHECK-NEXT: b.lt .LBB19_2311; CHECK-NEXT: // %bb.1: // %call312; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill313; CHECK-NEXT: bl call314; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload315; CHECK-NEXT: .LBB19_2: // %exit316; CHECK-NEXT: ret317 %cmp = icmp sle i128 %a, %b318 br i1 %cmp, label %call, label %exit319call:320 call void @call()321 br label %exit322exit:323 ret void324}325 326