// With no output args, we emit assembly to stdout.
// RUN: %clang_dxc -T lib_6_7 -Vd %s -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-STDOUT
// RUN: %clang_dxc -T lib_6_7 -Vd %s -ccc-print-phases 2>&1 | FileCheck %s --check-prefixes=CHECK-PHASES,CHECK-PHASES-ASM
// Same if we explicitly ask for assembly (-Fc) to stdout.
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc - -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-STDOUT
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc - -ccc-print-phases 2>&1 | FileCheck %s --check-prefixes=CHECK-PHASES,CHECK-PHASES-ASM
// DXIL Assembly to a file.
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc x.asm -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-ASM
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fcx.asm -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-ASM
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc x.asm -ccc-print-phases 2>&1 | FileCheck %s --check-prefixes=CHECK-PHASES,CHECK-PHASES-ASM
// DXIL Object code to a file.
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fo x.obj -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-OBJ
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fox.obj -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-OBJ
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fo x.obj -ccc-print-phases 2>&1 | FileCheck %s --check-prefixes=CHECK-PHASES,CHECK-PHASES-OBJ
// If both -Fc and -Fo are provided, we generate both files.
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc x.asm -Fo x.obj -### 2>&1 | FileCheck %s --check-prefixes=CHECK-CC1,CHECK-CC1-ASM,CHECK-CC1-BOTH
// RUN: %clang_dxc -T lib_6_7 -Vd %s -Fc x.asm -Fo x.obj -ccc-print-phases 2>&1 | FileCheck %s --check-prefixes=CHECK-PHASES,CHECK-PHASES-OBJ
// CHECK-PHASES: 0: input, {{.*}}, hlsl
// CHECK-PHASES: 1: preprocessor, {0}, c++-cpp-output
// CHECK-PHASES: 2: compiler, {1}, ir
// CHECK-PHASES: 3: backend, {2}, assembler
// CHECK-PHASES-ASM-NOT: 4: assembler, {3}, object
// CHECK-PHASES-OBJ: 4: assembler, {3}, object
// CHECK-CC1: "-cc1"
// CHECK-CC1-STDOUT-SAME: "-o" "-"
// CHECK-CC1-ASM-SAME: "-S"
// CHECK-CC1-ASM-SAME: "-o" "x.asm"
// CHECK-CC1-OBJ-SAME: "-emit-obj"
// CHECK-CC1-OBJ-SAME: "-o" "x.obj"
// For the case where we specify both -Fc and -Fo, we emit the asm as part of
// cc1 and invoke cc1as for the object.
// CHECK-CC1-BOTH: "-cc1as"
// CHECK-CC1-BOTH-SAME: "-o" "x.obj"