brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · bbb7bb6 Raw
208 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare void @use.i8(i8)5define i8 @test_add_nsw(i8 %x, i8 %y, i8 %z) {6; CHECK-LABEL: @test_add_nsw(7; CHECK-NEXT:    [[LHS:%.*]] = add nsw i8 [[X:%.*]], [[Y:%.*]]8; CHECK-NEXT:    [[RHS:%.*]] = add nsw i8 [[X]], [[Z:%.*]]9; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])10; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])11; CHECK-NEXT:    [[R:%.*]] = sub nsw i8 [[Y]], [[Z]]12; CHECK-NEXT:    ret i8 [[R]]13;14  %lhs = add nsw i8 %x, %y15  %rhs = add nsw i8 %x, %z16  call void @use.i8(i8 %lhs)17  call void @use.i8(i8 %rhs)18  %r = sub nsw i8 %lhs, %rhs19  ret i8 %r20}21 22define i8 @test_add_nsw_no_prop(i8 %x, i8 %y, i8 %z) {23; CHECK-LABEL: @test_add_nsw_no_prop(24; CHECK-NEXT:    [[LHS:%.*]] = add nsw i8 [[X:%.*]], [[Y:%.*]]25; CHECK-NEXT:    [[RHS:%.*]] = add nuw i8 [[X]], [[Z:%.*]]26; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])27; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])28; CHECK-NEXT:    [[R:%.*]] = sub i8 [[Y]], [[Z]]29; CHECK-NEXT:    ret i8 [[R]]30;31  %lhs = add nsw i8 %x, %y32  %rhs = add nuw i8 %x, %z33  call void @use.i8(i8 %lhs)34  call void @use.i8(i8 %rhs)35  %r = sub nsw i8 %lhs, %rhs36  ret i8 %r37}38 39define i8 @test_add(i8 %x, i8 %y, i8 %z) {40; CHECK-LABEL: @test_add(41; CHECK-NEXT:    [[LHS:%.*]] = add i8 [[X:%.*]], [[Y:%.*]]42; CHECK-NEXT:    [[RHS:%.*]] = add i8 [[X]], [[Z:%.*]]43; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])44; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])45; CHECK-NEXT:    [[R:%.*]] = sub i8 [[Y]], [[Z]]46; CHECK-NEXT:    ret i8 [[R]]47;48  %lhs = add i8 %x, %y49  %rhs = add i8 %x, %z50  call void @use.i8(i8 %lhs)51  call void @use.i8(i8 %rhs)52  %r = sub i8 %lhs, %rhs53  ret i8 %r54}55 56define i8 @test_add_fail(i8 %w, i8 %x, i8 %y, i8 %z) {57; CHECK-LABEL: @test_add_fail(58; CHECK-NEXT:    [[LHS:%.*]] = add i8 [[W:%.*]], [[Y:%.*]]59; CHECK-NEXT:    [[RHS:%.*]] = add i8 [[X:%.*]], [[Z:%.*]]60; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])61; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])62; CHECK-NEXT:    [[R:%.*]] = sub i8 [[LHS]], [[RHS]]63; CHECK-NEXT:    ret i8 [[R]]64;65  %lhs = add i8 %w, %y66  %rhs = add i8 %x, %z67  call void @use.i8(i8 %lhs)68  call void @use.i8(i8 %rhs)69  %r = sub i8 %lhs, %rhs70  ret i8 %r71}72 73define i8 @test_add_nuw(i8 %x, i8 %y, i8 %z) {74; CHECK-LABEL: @test_add_nuw(75; CHECK-NEXT:    [[LHS:%.*]] = add i8 [[X:%.*]], [[Y:%.*]]76; CHECK-NEXT:    [[RHS:%.*]] = or disjoint i8 [[X]], [[Z:%.*]]77; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])78; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])79; CHECK-NEXT:    [[R:%.*]] = sub nuw i8 [[Y]], [[Z]]80; CHECK-NEXT:    ret i8 [[R]]81;82  %lhs = add i8 %x, %y83  %rhs = or disjoint i8 %x, %z84  call void @use.i8(i8 %lhs)85  call void @use.i8(i8 %rhs)86  %r = sub nuw i8 %lhs, %rhs87  ret i8 %r88}89 90define i8 @test_add_nuw_no_prop(i8 %x, i8 %y, i8 %z) {91; CHECK-LABEL: @test_add_nuw_no_prop(92; CHECK-NEXT:    [[LHS:%.*]] = add i8 [[X:%.*]], [[Y:%.*]]93; CHECK-NEXT:    [[RHS:%.*]] = or disjoint i8 [[X]], [[Z:%.*]]94; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])95; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])96; CHECK-NEXT:    [[R:%.*]] = sub i8 [[Y]], [[Z]]97; CHECK-NEXT:    ret i8 [[R]]98;99  %lhs = add i8 %x, %y100  %rhs = or disjoint i8 %x, %z101  call void @use.i8(i8 %lhs)102  call void @use.i8(i8 %rhs)103  %r = sub i8 %lhs, %rhs104  ret i8 %r105}106 107define i8 @test_sub_nuw(i8 %x, i8 %y, i8 %z) {108; CHECK-LABEL: @test_sub_nuw(109; CHECK-NEXT:    [[LHS:%.*]] = sub nuw i8 [[X:%.*]], [[Y:%.*]]110; CHECK-NEXT:    [[RHS:%.*]] = sub nuw i8 [[Y]], [[Z:%.*]]111; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])112; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])113; CHECK-NEXT:    [[R:%.*]] = sub nuw i8 [[X]], [[Z]]114; CHECK-NEXT:    ret i8 [[R]]115;116  %lhs = sub nuw i8 %x, %y117  %rhs = sub nuw i8 %y, %z118  call void @use.i8(i8 %lhs)119  call void @use.i8(i8 %rhs)120  %r = add i8 %lhs, %rhs121  ret i8 %r122}123 124define i8 @test_sub_nuw_no_prop(i8 %x, i8 %y, i8 %z) {125; CHECK-LABEL: @test_sub_nuw_no_prop(126; CHECK-NEXT:    [[LHS:%.*]] = sub nuw i8 [[X:%.*]], [[Y:%.*]]127; CHECK-NEXT:    [[RHS:%.*]] = sub i8 [[Y]], [[Z:%.*]]128; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])129; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])130; CHECK-NEXT:    [[R:%.*]] = sub i8 [[X]], [[Z]]131; CHECK-NEXT:    ret i8 [[R]]132;133  %lhs = sub nuw i8 %x, %y134  %rhs = sub i8 %y, %z135  call void @use.i8(i8 %lhs)136  call void @use.i8(i8 %rhs)137  %r = add nuw i8 %lhs, %rhs138  ret i8 %r139}140 141define i8 @test_sub_nsw(i8 %x, i8 %y, i8 %z) {142; CHECK-LABEL: @test_sub_nsw(143; CHECK-NEXT:    [[LHS:%.*]] = sub nsw i8 [[X:%.*]], [[Y:%.*]]144; CHECK-NEXT:    [[RHS:%.*]] = sub nsw i8 [[Y]], [[Z:%.*]]145; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])146; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])147; CHECK-NEXT:    [[R:%.*]] = sub nsw i8 [[X]], [[Z]]148; CHECK-NEXT:    ret i8 [[R]]149;150  %lhs = sub nsw i8 %x, %y151  %rhs = sub nsw i8 %y, %z152  call void @use.i8(i8 %lhs)153  call void @use.i8(i8 %rhs)154  %r = or disjoint i8 %lhs, %rhs155  ret i8 %r156}157 158define i8 @test_sub_nsw_no_prop(i8 %x, i8 %y, i8 %z) {159; CHECK-LABEL: @test_sub_nsw_no_prop(160; CHECK-NEXT:    [[LHS:%.*]] = sub i8 [[X:%.*]], [[Y:%.*]]161; CHECK-NEXT:    [[RHS:%.*]] = sub nsw i8 [[Y]], [[Z:%.*]]162; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])163; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])164; CHECK-NEXT:    [[R:%.*]] = sub i8 [[X]], [[Z]]165; CHECK-NEXT:    ret i8 [[R]]166;167  %lhs = sub i8 %x, %y168  %rhs = sub nsw i8 %y, %z169  call void @use.i8(i8 %lhs)170  call void @use.i8(i8 %rhs)171  %r = or disjoint i8 %lhs, %rhs172  ret i8 %r173}174 175define i8 @test_sub_none(i8 %x, i8 %y, i8 %z) {176; CHECK-LABEL: @test_sub_none(177; CHECK-NEXT:    [[LHS:%.*]] = sub i8 [[X:%.*]], [[Y:%.*]]178; CHECK-NEXT:    [[RHS:%.*]] = sub i8 [[Y]], [[Z:%.*]]179; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])180; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])181; CHECK-NEXT:    [[R:%.*]] = sub i8 [[X]], [[Z]]182; CHECK-NEXT:    ret i8 [[R]]183;184  %lhs = sub i8 %x, %y185  %rhs = sub i8 %y, %z186  call void @use.i8(i8 %lhs)187  call void @use.i8(i8 %rhs)188  %r = add i8 %lhs, %rhs189  ret i8 %r190}191 192define i8 @test_sub_none_fail(i8 %x, i8 %y, i8 %z) {193; CHECK-LABEL: @test_sub_none_fail(194; CHECK-NEXT:    [[LHS:%.*]] = sub i8 [[X:%.*]], [[Y:%.*]]195; CHECK-NEXT:    [[RHS:%.*]] = sub i8 [[Z:%.*]], [[Y]]196; CHECK-NEXT:    call void @use.i8(i8 [[LHS]])197; CHECK-NEXT:    call void @use.i8(i8 [[RHS]])198; CHECK-NEXT:    [[R:%.*]] = add i8 [[LHS]], [[RHS]]199; CHECK-NEXT:    ret i8 [[R]]200;201  %lhs = sub i8 %x, %y202  %rhs = sub i8 %z, %y203  call void @use.i8(i8 %lhs)204  call void @use.i8(i8 %rhs)205  %r = add i8 %lhs, %rhs206  ret i8 %r207}208