86 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -O3 -S < %s | FileCheck %s3; RUN: opt -passes="default<O3>" -S < %s | FileCheck %s4 5define void @foo(i1 %which, i32 %a, i32 %b, ptr %result) {6; CHECK-LABEL: @foo(7; CHECK-NEXT: entry:8; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]9; CHECK-NEXT: [[Z_V_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]10; CHECK-NEXT: [[Z_V:%.*]] = add i32 [[Z_V_P]], [[A:%.*]]11; CHECK-NEXT: [[Z:%.*]] = zext i32 [[Z_V]] to i6412; CHECK-NEXT: [[C:%.*]] = load i64, ptr [[RESULT:%.*]], align 413; CHECK-NEXT: [[VALUE:%.*]] = add i64 [[C]], [[Z]]14; CHECK-NEXT: store i64 [[VALUE]], ptr [[RESULT]], align 415; CHECK-NEXT: ret void16;17entry:18 %x = add i32 %a, %b19 %x2 = zext i32 %x to i6420 br i1 %which, label %final, label %delay21 22delay:23 %y = sub i32 %a, %b24 %y2 = zext i32 %y to i6425 br label %final26 27final:28 %z = phi i64 [ %x2, %entry ], [ %y2, %delay ]29 %c = load i64, ptr %result30 %value = add i64 %z, %c31 store i64 %value, ptr %result32 ret void33}34 35define void @bar(i1 %which, i32 %a, i32 %b, ptr %result) {36; CHECK-LABEL: @bar(37; CHECK-NEXT: entry:38; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]39; CHECK-NEXT: [[SPEC_SELECT_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]40; CHECK-NEXT: [[SPEC_SELECT:%.*]] = add i32 [[SPEC_SELECT_P]], [[A:%.*]]41; CHECK-NEXT: [[Z2:%.*]] = zext i32 [[SPEC_SELECT]] to i6442; CHECK-NEXT: [[C:%.*]] = load i64, ptr [[RESULT:%.*]], align 443; CHECK-NEXT: [[VALUE:%.*]] = add i64 [[C]], [[Z2]]44; CHECK-NEXT: store i64 [[VALUE]], ptr [[RESULT]], align 445; CHECK-NEXT: ret void46;47entry:48 %x = add i32 %a, %b49 br i1 %which, label %final, label %delay50 51delay:52 %y = sub i32 %a, %b53 br label %final54 55final:56 %z = phi i32 [ %x, %entry ], [ %y, %delay ]57 %z2 = zext i32 %z to i6458 %c = load i64, ptr %result59 %value = add i64 %z2, %c60 store i64 %value, ptr %result61 ret void62}63 64define void @foo_opt(i1 %which, i32 %a, i32 %b, ptr nocapture %result) {65; CHECK-LABEL: @foo_opt(66; CHECK-NEXT: entry:67; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]68; CHECK-NEXT: [[Z_V_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]69; CHECK-NEXT: [[Z_V:%.*]] = add i32 [[Z_V_P]], [[A:%.*]]70; CHECK-NEXT: [[Z:%.*]] = zext i32 [[Z_V]] to i6471; CHECK-NEXT: [[C:%.*]] = load i64, ptr [[RESULT:%.*]], align 472; CHECK-NEXT: [[VALUE:%.*]] = add i64 [[C]], [[Z]]73; CHECK-NEXT: store i64 [[VALUE]], ptr [[RESULT]], align 474; CHECK-NEXT: ret void75;76entry:77 %0 = sub i32 0, %b78 %z.v.p = select i1 %which, i32 %b, i32 %079 %z.v = add i32 %z.v.p, %a80 %z = zext i32 %z.v to i6481 %c = load i64, ptr %result, align 482 %value = add i64 %c, %z83 store i64 %value, ptr %result, align 484 ret void85}86