xref: /llvm-project/llvm/test/Transforms/IROutliner/outlining-commutative-operands-opposite-order.ll (revision 9dd9575c55c74810675d5de40f56b37dd38fe3c3)
1063af63bSAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --include-generated-funcs
2*9dd9575cSRoman Lebedev; RUN: opt -S -passes=iroutliner -ir-outlining-no-cost < %s | FileCheck %s
3063af63bSAndrew Litteken
4063af63bSAndrew Litteken; This is a test to ensure that when the first instruction is a commutative
5063af63bSAndrew Litteken; instruction, but the order of operands is reversed, we pass the arguments
6063af63bSAndrew Litteken; in the correct order, such that we do not use the wrong arguments
7063af63bSAndrew Litteken; later on in the computation.
8063af63bSAndrew Litteken
9063af63bSAndrew Littekendefine void @fish(i32 %0, i32 %1, i32 %2) {
10063af63bSAndrew Littekenentry:
11063af63bSAndrew Litteken  %3 = add nsw i32 %0, %1
12063af63bSAndrew Litteken  %4 = sub nsw i32 %1, %2
13063af63bSAndrew Litteken  %5 = sub nsw i32 %0, %2
14063af63bSAndrew Litteken  ret void
15063af63bSAndrew Litteken}
16063af63bSAndrew Litteken
17063af63bSAndrew Littekendefine void @turtle(i32 %0, i32 %1, i32 %2) {
18063af63bSAndrew Litteken  %4 = add nsw i32 %1, %0
19063af63bSAndrew Litteken  %5 = sub nsw i32 %1, %2
20063af63bSAndrew Litteken  %6 = sub nsw i32 %0, %2
21063af63bSAndrew Litteken  ret void
22063af63bSAndrew Litteken}
23063af63bSAndrew Litteken; CHECK-LABEL: @fish(
24063af63bSAndrew Litteken; CHECK-NEXT:  entry:
25063af63bSAndrew Litteken; CHECK-NEXT:    call void @outlined_ir_func_0(i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]])
26063af63bSAndrew Litteken; CHECK-NEXT:    ret void
27063af63bSAndrew Litteken;
28063af63bSAndrew Litteken;
29063af63bSAndrew Litteken; CHECK-LABEL: @turtle(
30063af63bSAndrew Litteken; CHECK-NEXT:    call void @outlined_ir_func_0(i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]])
31063af63bSAndrew Litteken; CHECK-NEXT:    ret void
32063af63bSAndrew Litteken;
33063af63bSAndrew Litteken;
34063af63bSAndrew Litteken; CHECK: @outlined_ir_func_0(i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]])
35063af63bSAndrew Litteken; CHECK:       entry_to_outline:
36063af63bSAndrew Litteken; CHECK-NEXT:    [[TMP3:%.*]] = add nsw i32 [[TMP0]], [[TMP1]]
37063af63bSAndrew Litteken; CHECK-NEXT:    [[TMP4:%.*]] = sub nsw i32 [[TMP1]], [[TMP2]]
38063af63bSAndrew Litteken; CHECK-NEXT:    [[TMP5:%.*]] = sub nsw i32 [[TMP0]], [[TMP2]]
39063af63bSAndrew Litteken; CHECK-NEXT:    br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]]
40063af63bSAndrew Litteken;
41