brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 6d57af9 Raw
121 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i8 @single(i32 %A) {5; CHECK-LABEL: @single(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[CONV71:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 -128)8; CHECK-NEXT:    [[CONV7:%.*]] = trunc i32 [[CONV71]] to i89; CHECK-NEXT:    ret i8 [[CONV7]]10;11entry:12  %l1 = icmp slt i32 %A, -12813  %l2 = select i1 %l1, i32 128, i32 %A14  %conv7 = trunc i32 %l2 to i815  ret i8 %conv716}17 18define i8 @double(i32 %A) {19; CHECK-LABEL: @double(20; CHECK-NEXT:  entry:21; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 -128)22; CHECK-NEXT:    [[CONV71:%.*]] = call i32 @llvm.smin.i32(i32 [[TMP0]], i32 127)23; CHECK-NEXT:    [[CONV7:%.*]] = trunc nsw i32 [[CONV71]] to i824; CHECK-NEXT:    ret i8 [[CONV7]]25;26entry:27  %l1 = icmp slt i32 %A, -12828  %l2 = select i1 %l1, i32 128, i32 %A29  %.inv = icmp sgt i32 %A, 12730  %spec.select.i = select i1 %.inv, i32 127, i32 %l231  %conv7 = trunc i32 %spec.select.i to i832  ret i8 %conv733}34 35define i8 @thisdoesnotloop(i32 %A, i32 %B) {36; CHECK-LABEL: @thisdoesnotloop(37; CHECK-NEXT:  entry:38; CHECK-NEXT:    [[L1:%.*]] = icmp slt i32 [[A:%.*]], -12839; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[B:%.*]] to i840; CHECK-NEXT:    [[CONV7:%.*]] = select i1 [[L1]], i8 -128, i8 [[TMP0]]41; CHECK-NEXT:    ret i8 [[CONV7]]42;43entry:44  %l1 = icmp slt i32 %A, -12845  %l2 = select i1 %l1, i32 128, i32 %B46  %conv7 = trunc i32 %l2 to i847  ret i8 %conv748}49 50define i8 @original(i32 %A, i32 %B) {51; CHECK-LABEL: @original(52; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 -128)53; CHECK-NEXT:    [[SPEC_SELECT_I:%.*]] = call i32 @llvm.smin.i32(i32 [[TMP1]], i32 127)54; CHECK-NEXT:    [[CONV7:%.*]] = trunc nsw i32 [[SPEC_SELECT_I]] to i855; CHECK-NEXT:    ret i8 [[CONV7]]56;57  %cmp4.i = icmp slt i32 127, %A58  %cmp6.i = icmp sle i32 -128, %A59  %retval.0.i = select i1 %cmp4.i, i32 127, i32 -12860  %not.cmp4.i = xor i1 %cmp4.i, true61  %cleanup.dest.slot.0.i = and i1 %cmp6.i, %not.cmp4.i62  %spec.select.i = select i1 %cleanup.dest.slot.0.i, i32 %A, i32 %retval.0.i63  %conv7 = trunc i32 %spec.select.i to i864  ret i8 %conv765}66 67define i8 @original_logical(i32 %A, i32 %B) {68; CHECK-LABEL: @original_logical(69; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smax.i32(i32 [[A:%.*]], i32 -128)70; CHECK-NEXT:    [[SPEC_SELECT_I:%.*]] = call i32 @llvm.smin.i32(i32 [[TMP1]], i32 127)71; CHECK-NEXT:    [[CONV7:%.*]] = trunc nsw i32 [[SPEC_SELECT_I]] to i872; CHECK-NEXT:    ret i8 [[CONV7]]73;74  %cmp4.i = icmp slt i32 127, %A75  %cmp6.i = icmp sle i32 -128, %A76  %retval.0.i = select i1 %cmp4.i, i32 127, i32 -12877  %not.cmp4.i = xor i1 %cmp4.i, true78  %cleanup.dest.slot.0.i = select i1 %cmp6.i, i1 %not.cmp4.i, i1 false79  %spec.select.i = select i1 %cleanup.dest.slot.0.i, i32 %A, i32 %retval.0.i80  %conv7 = trunc i32 %spec.select.i to i881  ret i8 %conv782}83 84; This would infinite loop because we have potentially opposing85; constant transforms on degenerate (unsimplified) cmps.86 87define i32 @PR49205(i32 %t0, i1 %b) {88; CHECK-LABEL: @PR49205(89; CHECK-NEXT:  entry:90; CHECK-NEXT:    br label [[FOR_COND:%.*]]91; CHECK:       for.cond:92; CHECK-NEXT:    br i1 [[B:%.*]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]93; CHECK:       for.body:94; CHECK-NEXT:    br label [[FOR_COND]]95; CHECK:       for.end:96; CHECK-NEXT:    ret i32 197;98entry:99  br label %for.cond100 101for.cond:102  %s = phi i32 [ 7, %entry ], [ %add, %for.body ]103  br i1 %b, label %for.body, label %for.end104 105for.body:106  %div = add i32 %t0, undef107  %add = add nsw i32 %div, 1108  br label %for.cond109 110for.end:111  %cmp6 = icmp ne i32 %s, 4112  %conv = zext i1 %cmp6 to i32113  %and7 = and i32 %s, %conv114  %sub = sub i32 %s, %and7115  %cmp9 = icmp ne i32 %sub, 4116  %conv10 = zext i1 %cmp9 to i32117  %sub11 = sub i32 %conv10, %sub118  %and = and i32 %sub11, 1119  ret i32 %and120}121