brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 7d5b3f6 Raw
286 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i1 @test_eq(i1 %cond) {5; CHECK-LABEL: @test_eq(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]8; CHECK:       if.true:9; CHECK-NEXT:    br label [[MERGE:%.*]]10; CHECK:       if.false:11; CHECK-NEXT:    br label [[MERGE]]12; CHECK:       merge:13; CHECK-NEXT:    br label [[EXIT:%.*]]14; CHECK:       exit:15; CHECK-NEXT:    [[COMPARE:%.*]] = xor i1 [[COND]], true16; CHECK-NEXT:    ret i1 [[COMPARE]]17;18entry:19  br i1 %cond, label %if.true, label %if.false20 21if.true:22  br label %merge23 24if.false:25  br label %merge26 27merge:28  %phi = phi i32 [123, %if.true], [456, %if.false]29  br label %exit30 31exit:32  %compare = icmp eq i32 %phi, 45633  ret i1 %compare34}35 36define i1 @test_slt(i1 %cond) {37; CHECK-LABEL: @test_slt(38; CHECK-NEXT:  entry:39; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]40; CHECK:       if.true:41; CHECK-NEXT:    br label [[MERGE:%.*]]42; CHECK:       if.false:43; CHECK-NEXT:    br label [[MERGE]]44; CHECK:       merge:45; CHECK-NEXT:    br label [[EXIT:%.*]]46; CHECK:       exit:47; CHECK-NEXT:    ret i1 [[COND]]48;49entry:50  br i1 %cond, label %if.true, label %if.false51 52if.true:53  br label %merge54 55if.false:56  br label %merge57 58merge:59  %phi = phi i32 [123, %if.true], [456, %if.false]60  br label %exit61 62exit:63  %compare = icmp slt i32 %phi, 45664  ret i1 %compare65}66 67define i1 @test_sle(i1 %cond) {68; CHECK-LABEL: @test_sle(69; CHECK-NEXT:  entry:70; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]71; CHECK:       if.true:72; CHECK-NEXT:    br label [[MERGE:%.*]]73; CHECK:       if.false:74; CHECK-NEXT:    br label [[MERGE]]75; CHECK:       merge:76; CHECK-NEXT:    br label [[EXIT:%.*]]77; CHECK:       exit:78; CHECK-NEXT:    ret i1 true79;80entry:81  br i1 %cond, label %if.true, label %if.false82 83if.true:84  br label %merge85 86if.false:87  br label %merge88 89merge:90  %phi = phi i32 [123, %if.true], [456, %if.false]91  br label %exit92 93exit:94  %compare = icmp sle i32 %phi, 45695  ret i1 %compare96}97 98define i1 @test_ne(i1 %cond) {99; CHECK-LABEL: @test_ne(100; CHECK-NEXT:  entry:101; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]102; CHECK:       if.true:103; CHECK-NEXT:    br label [[MERGE:%.*]]104; CHECK:       if.false:105; CHECK-NEXT:    br label [[MERGE]]106; CHECK:       merge:107; CHECK-NEXT:    br label [[EXIT:%.*]]108; CHECK:       exit:109; CHECK-NEXT:    ret i1 [[COND]]110;111entry:112  br i1 %cond, label %if.true, label %if.false113 114if.true:115  br label %merge116 117if.false:118  br label %merge119 120merge:121  %phi = phi i32 [123, %if.true], [456, %if.false]122  br label %exit123 124exit:125  %compare = icmp ne i32 %phi, 456126  ret i1 %compare127}128 129define i1 @test_ne_undef(i1 %cond) {130; CHECK-LABEL: @test_ne_undef(131; CHECK-NEXT:  entry:132; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]133; CHECK:       if.true:134; CHECK-NEXT:    br label [[MERGE:%.*]]135; CHECK:       if.false:136; CHECK-NEXT:    br label [[MERGE]]137; CHECK:       merge:138; CHECK-NEXT:    br label [[EXIT:%.*]]139; CHECK:       exit:140; CHECK-NEXT:    ret i1 false141;142entry:143  br i1 %cond, label %if.true, label %if.false144 145if.true:146  br label %merge147 148if.false:149  br label %merge150 151merge:152  %phi = phi i32 [undef, %if.true], [456, %if.false]153  br label %exit154 155exit:156  %compare = icmp ne i32 %phi, 456157  ret i1 %compare158}159 160define <2 x i1> @test_ne_int_vector(i1 %cond) {161; CHECK-LABEL: @test_ne_int_vector(162; CHECK-NEXT:  entry:163; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]164; CHECK:       if.true:165; CHECK-NEXT:    br label [[MERGE:%.*]]166; CHECK:       if.false:167; CHECK-NEXT:    br label [[MERGE]]168; CHECK:       merge:169; CHECK-NEXT:    [[COMPARE:%.*]] = phi <2 x i1> [ <i1 false, i1 true>, [[IF_TRUE]] ], [ <i1 true, i1 false>, [[IF_FALSE]] ]170; CHECK-NEXT:    br label [[EXIT:%.*]]171; CHECK:       exit:172; CHECK-NEXT:    ret <2 x i1> [[COMPARE]]173;174entry:175  br i1 %cond, label %if.true, label %if.false176 177if.true:178  br label %merge179 180if.false:181  br label %merge182 183merge:184  %phi = phi <2 x i32> [<i32 123, i32 123>, %if.true], [<i32 456, i32 456>, %if.false]185  br label %exit186 187exit:188  %compare = icmp ne <2 x i32> %phi, <i32 123, i32 456>189  ret <2 x i1> %compare190}191 192; TODO: We can also constant-fold this comparison for floats.193define i1 @test_ne_float(i1 %cond) {194; CHECK-LABEL: @test_ne_float(195; CHECK-NEXT:  entry:196; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]197; CHECK:       if.true:198; CHECK-NEXT:    br label [[MERGE:%.*]]199; CHECK:       if.false:200; CHECK-NEXT:    br label [[MERGE]]201; CHECK:       merge:202; CHECK-NEXT:    br label [[EXIT:%.*]]203; CHECK:       exit:204; CHECK-NEXT:    ret i1 [[COND]]205;206entry:207  br i1 %cond, label %if.true, label %if.false208 209if.true:210  br label %merge211 212if.false:213  br label %merge214 215merge:216  %phi = phi float [1.0, %if.true], [1.25, %if.false]217  br label %exit218 219exit:220  %compare = fcmp one float %phi, 1.25221  ret i1 %compare222}223 224define i1 @test_ne_float_undef(i1 %cond) {225; CHECK-LABEL: @test_ne_float_undef(226; CHECK-NEXT:  entry:227; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]228; CHECK:       if.true:229; CHECK-NEXT:    br label [[MERGE:%.*]]230; CHECK:       if.false:231; CHECK-NEXT:    br label [[MERGE]]232; CHECK:       merge:233; CHECK-NEXT:    br label [[EXIT:%.*]]234; CHECK:       exit:235; CHECK-NEXT:    ret i1 true236;237entry:238  br i1 %cond, label %if.true, label %if.false239 240if.true:241  br label %merge242 243if.false:244  br label %merge245 246merge:247  %phi = phi float [1.0, %if.true], [undef, %if.false]248  br label %exit249 250exit:251  %compare = fcmp one float %phi, 1.25252  ret i1 %compare253}254 255define <2 x i1> @test_ne_float_vector(i1 %cond) {256; CHECK-LABEL: @test_ne_float_vector(257; CHECK-NEXT:  entry:258; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]259; CHECK:       if.true:260; CHECK-NEXT:    br label [[MERGE:%.*]]261; CHECK:       if.false:262; CHECK-NEXT:    br label [[MERGE]]263; CHECK:       merge:264; CHECK-NEXT:    [[PHI:%.*]] = phi <2 x i1> [ <i1 false, i1 true>, [[IF_TRUE]] ], [ <i1 true, i1 false>, [[IF_FALSE]] ]265; CHECK-NEXT:    br label [[EXIT:%.*]]266; CHECK:       exit:267; CHECK-NEXT:    ret <2 x i1> [[PHI]]268;269entry:270  br i1 %cond, label %if.true, label %if.false271 272if.true:273  br label %merge274 275if.false:276  br label %merge277 278merge:279  %phi = phi <2 x float> [<float 123.25, float 123.25>, %if.true], [<float 456.25, float 456.25>, %if.false]280  br label %exit281 282exit:283  %compare = fcmp one <2 x float> %phi, <float 123.25, float 456.25>284  ret <2 x i1> %compare285}286