brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 444385d Raw
147 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=newgvn -S | FileCheck %s3;4 5%0 = type { i64, i1 }6 7define i64 @test1(i64 %a, i64 %b) nounwind ssp {8; CHECK-LABEL: define i64 @test1(9; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0:[0-9]+]] {10; CHECK-NEXT:  entry:11; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 [[A]], i64 [[B]])12; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 013; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 014; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 115; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 116; CHECK-NEXT:    [[UADD_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 017; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[UADD_0]]18; CHECK-NEXT:    ret i64 [[ADD2]]19;20entry:21  %uadd = tail call %0 @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)22  %uadd.0 = extractvalue %0 %uadd, 023  %add1 = add i64 %a, %b24  %add2 =  add i64 %add1, %uadd.025  ret i64 %add226}27 28 29define i64 @test2(i64 %a, i64 %b) nounwind ssp {30; CHECK-LABEL: define i64 @test2(31; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {32; CHECK-NEXT:  entry:33; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 [[A]], i64 [[B]])34; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 035; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 036; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 137; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 138; CHECK-NEXT:    [[USUB_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 039; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[USUB_0]]40; CHECK-NEXT:    ret i64 [[ADD2]]41;42entry:43  %usub = tail call %0 @llvm.usub.with.overflow.i64(i64 %a, i64 %b)44  %usub.0 = extractvalue %0 %usub, 045  %sub1 = sub i64 %a, %b46  %add2 =  add i64 %sub1, %usub.047  ret i64 %add248}49 50 51define i64 @test3(i64 %a, i64 %b) nounwind ssp {52; CHECK-LABEL: define i64 @test3(53; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {54; CHECK-NEXT:  entry:55; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A]], i64 [[B]])56; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 057; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 058; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 159; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 160; CHECK-NEXT:    [[UMUL_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 061; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[UMUL_0]]62; CHECK-NEXT:    ret i64 [[ADD2]]63;64entry:65  %umul = tail call %0 @llvm.umul.with.overflow.i64(i64 %a, i64 %b)66  %umul.0 = extractvalue %0 %umul, 067  %mul1 = mul i64 %a, %b68  %add2 =  add i64 %mul1, %umul.069  ret i64 %add270}71 72 73define i64 @test4(i64 %a, i64 %b) nounwind ssp {74; CHECK-LABEL: define i64 @test4(75; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {76; CHECK-NEXT:  entry:77; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 [[A]], i64 [[B]])78; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 079; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 080; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 181; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 182; CHECK-NEXT:    [[SADD_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 083; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[SADD_0]]84; CHECK-NEXT:    ret i64 [[ADD2]]85;86entry:87  %sadd = tail call %0 @llvm.sadd.with.overflow.i64(i64 %a, i64 %b)88  %sadd.0 = extractvalue %0 %sadd, 089  %add1 = add i64 %a, %b90  %add2 =  add i64 %add1, %sadd.091  ret i64 %add292}93 94 95define i64 @test5(i64 %a, i64 %b) nounwind ssp {96; CHECK-LABEL: define i64 @test5(97; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {98; CHECK-NEXT:  entry:99; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 [[A]], i64 [[B]])100; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 0101; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 0102; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 1103; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 1104; CHECK-NEXT:    [[SSUB_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 0105; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[SSUB_0]]106; CHECK-NEXT:    ret i64 [[ADD2]]107;108entry:109  %ssub = tail call %0 @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)110  %ssub.0 = extractvalue %0 %ssub, 0111  %sub1 = sub i64 %a, %b112  %add2 =  add i64 %sub1, %ssub.0113  ret i64 %add2114}115 116 117define i64 @test6(i64 %a, i64 %b) nounwind ssp {118; CHECK-LABEL: define i64 @test6(119; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) #[[ATTR0]] {120; CHECK-NEXT:  entry:121; CHECK-NEXT:    [[TMP0:%.*]] = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 [[A]], i64 [[B]])122; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i64, i1 } [[TMP0]], 0123; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[TMP0]] poison, i64 [[TMP1]], 0124; CHECK-NEXT:    [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP0]], 1125; CHECK-NEXT:    [[TMP4:%.*]] = insertvalue [[TMP0]] [[TMP2]], i1 [[TMP3]], 1126; CHECK-NEXT:    [[SMUL_0:%.*]] = extractvalue [[TMP0]] [[TMP4]], 0127; CHECK-NEXT:    [[ADD2:%.*]] = add i64 [[TMP1]], [[SMUL_0]]128; CHECK-NEXT:    ret i64 [[ADD2]]129;130entry:131  %smul = tail call %0 @llvm.smul.with.overflow.i64(i64 %a, i64 %b)132  %smul.0 = extractvalue %0 %smul, 0133  %mul1 = mul i64 %a, %b134  %add2 =  add i64 %mul1, %smul.0135  ret i64 %add2136}137 138 139declare void @exit(i32) noreturn140declare %0 @llvm.uadd.with.overflow.i64(i64, i64) nounwind readnone141declare %0 @llvm.usub.with.overflow.i64(i64, i64) nounwind readnone142declare %0 @llvm.umul.with.overflow.i64(i64, i64) nounwind readnone143declare %0 @llvm.sadd.with.overflow.i64(i64, i64) nounwind readnone144declare %0 @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone145declare %0 @llvm.smul.with.overflow.i64(i64, i64) nounwind readnone146 147