brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 63ac050 Raw
150 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4define i8 @scmp_1(i32 %x, i32 %y) {5; CHECK-LABEL: @scmp_1(6; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]7; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]8; CHECK:       true:9; CHECK-NEXT:    ret i8 110; CHECK:       false:11; CHECK-NEXT:    ret i8 2012;13  %cond = icmp sgt i32 %x, %y14  br i1 %cond, label %true, label %false15true:16  %r = call i8 @llvm.scmp(i32 %x, i32 %y)17  ret i8 %r18false:19  ret i8 2020}21 22define i8 @ucmp_1(i32 %x, i32 %y) {23; CHECK-LABEL: @ucmp_1(24; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32 [[X:%.*]], [[Y:%.*]]25; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]26; CHECK:       true:27; CHECK-NEXT:    ret i8 -128; CHECK:       false:29; CHECK-NEXT:    ret i8 2030;31  %cond = icmp ult i32 %x, %y32  br i1 %cond, label %true, label %false33true:34  %r = call i8 @llvm.ucmp(i32 %x, i32 %y)35  ret i8 %r36false:37  ret i8 2038}39 40define i8 @scmp_2(i32 %x, i32 %y) {41; CHECK-LABEL: @scmp_2(42; CHECK-NEXT:    [[COND:%.*]] = icmp sge i32 [[X:%.*]], [[Y:%.*]]43; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]44; CHECK:       true:45; CHECK-NEXT:    ret i8 2046; CHECK:       false:47; CHECK-NEXT:    ret i8 -148;49  %cond = icmp sge i32 %x, %y50  br i1 %cond, label %true, label %false51true:52  ret i8 2053false:54  %r = call i8 @llvm.scmp(i32 %x, i32 %y)55  ret i8 %r56}57 58define i8 @ucmp_2(i32 %x, i32 %y) {59; CHECK-LABEL: @ucmp_2(60; CHECK-NEXT:    [[COND:%.*]] = icmp ule i32 [[X:%.*]], [[Y:%.*]]61; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]62; CHECK:       true:63; CHECK-NEXT:    ret i8 2064; CHECK:       false:65; CHECK-NEXT:    ret i8 166;67  %cond = icmp ule i32 %x, %y68  br i1 %cond, label %true, label %false69true:70  ret i8 2071false:72  %r = call i8 @llvm.ucmp(i32 %x, i32 %y)73  ret i8 %r74}75 76define i8 @scmp_3(i32 %x, i32 %y) {77; CHECK-LABEL: @scmp_3(78; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]79; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]80; CHECK:       true:81; CHECK-NEXT:    ret i8 082; CHECK:       false:83; CHECK-NEXT:    ret i8 2084;85  %cond = icmp eq i32 %x, %y86  br i1 %cond, label %true, label %false87true:88  %r = call i8 @llvm.scmp(i32 %x, i32 %y)89  ret i8 %r90false:91  ret i8 2092}93 94define i8 @ucmp_3(i32 %x, i32 %y) {95; CHECK-LABEL: @ucmp_3(96; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]97; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]98; CHECK:       true:99; CHECK-NEXT:    ret i8 0100; CHECK:       false:101; CHECK-NEXT:    ret i8 20102;103  %cond = icmp eq i32 %x, %y104  br i1 %cond, label %true, label %false105true:106  %r = call i8 @llvm.ucmp(i32 %x, i32 %y)107  ret i8 %r108false:109  ret i8 20110}111 112; Negative test: signedness mismatch113define i8 @scmp_4(i32 %x, i32 %y) {114; CHECK-LABEL: @scmp_4(115; CHECK-NEXT:    [[COND:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]116; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]117; CHECK:       true:118; CHECK-NEXT:    ret i8 20119; CHECK:       false:120; CHECK-NEXT:    [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 [[Y]])121; CHECK-NEXT:    ret i8 [[R]]122;123  %cond = icmp ugt i32 %x, %y124  br i1 %cond, label %true, label %false125true:126  ret i8 20127false:128  %r = call i8 @llvm.scmp(i32 %x, i32 %y)129  ret i8 %r130}131 132define i8 @ucmp_4(i32 %x, i32 %y) {133; CHECK-LABEL: @ucmp_4(134; CHECK-NEXT:    [[COND:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]135; CHECK-NEXT:    br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]136; CHECK:       true:137; CHECK-NEXT:    ret i8 20138; CHECK:       false:139; CHECK-NEXT:    [[R:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[X]], i32 [[Y]])140; CHECK-NEXT:    ret i8 [[R]]141;142  %cond = icmp slt i32 %x, %y143  br i1 %cond, label %true, label %false144true:145  ret i8 20146false:147  %r = call i8 @llvm.ucmp(i32 %x, i32 %y)148  ret i8 %r149}150